Как синхронизировать 2 потока с поочередным выполнением методов?

377
25 декабря 2016, 18:30

Есть 2 класса

class A : class Parent
{
    public void Draw()  
}
class B : class Parent
{
    public void Draw()  
}

И необходимо синхронизировать эти 2 потока, чтобы методы выполнялись строго поочередно. (или хотя бы до конца) У класса Parent есть объект синхронизации. Метод Draw реализован примерно так

public void Draw()
{
    while(true)
    {
        lock(obj)
        {
            //Рисуем объект
        }
    }
}

Как мне казалось, потоки должны были выполняться пусть и не поочередно, но до конца, только после этого , должен был начаться другой поток (или этот же). По факту получается, что процессы друг другу мешают

class Parent 
{
    public object obj = new object();
}

Класс с потоками:

class Game
{
    public void Start()
    {
        A first = new A();
        B second = new B();
        Thread doRoad = new Thread(A.Draw);
        Thread doAuto = new Thread(B.Draw);
        A.Start();
        B.Start();
    }
}
Answer 1

Из дискуссии в комментариях выяснилось, что у каждого из объектов свой экземпляр obj. Поэтому синхронизации и нету: ведь разные объекты синхронизируются каждый по своему obj!

Сделайте obj статическим полем базового класса.

READ ALSO