如何将多个线程同步到公共点

时间:2012-08-03 13:49:17

标签: c# multithreading .net-4.0

我想启动任意数量的线程,每个线程执行相同的方法,但使用不同的参数。每个线程需要在某一点阻塞,并等待所有线程到达同一点。 (就像赛车手进入他们的起跑线一样)

我很难理解如何让所有线程向初学者发出信号,告知他们每个人都准备好了。

3 个答案:

答案 0 :(得分:8)

解决方案是使用Barrier Class

答案 1 :(得分:-1)

我认为使用锁定可以同步线程的访问权限。

试试这个:

lock (lockThis)
{
    // Access thread-sensitive resources.
}

答案 2 :(得分:-1)

我不久前也在努力解决多线程问题。您尝试实现的目标可以使用您所知道的非常简单的方式完成。这是一个想法:

    class MyThread
    {
    private Thread thread;
    private bool isWaitingAtPointA = false;
    private bool continueWorking = false;

    public MyThread ()
    {
         thread = new Thread(DoMyStuff);
    }

    private void DoMyStuff() 
    { 
        //do stuff

        //when at point A :
        isWaitingAtPointA = true;
        while (!continueWorking)
        {
            Thread.Sleep(10);
        }
        isWaitingAtPointA = false;
        continueWorking = false;

        //do more stuff

    }

    public bool isAtWaitingPointA()
    {
        return isWaitingAtPointA;
    }
}

然后在主线程中有一个MyThread列表,它将实例化所有MyThread对象,启动它们的线程,并通过从主线程continueWorking设置为true来解锁它们。 显然,您可以通过调用isAtWaitingPointA()来检查所有线程是否都在A点。这种方法被称为“控制变量”我相信(如果我错了,请有人纠正我),这里的控制变量是bools isWaitingAtPointA和continueWorking。 您希望它们全部使用的方法在这里由DoMyStuff()表示,可以在其他地方定义以避免代码冗余。

我希望这会激励你=)