3

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

我不知道如何让所有线程向启动器发出信号,表明它们都准备好了。

4

3 回答 3

8

解决方案是使用Barrier Class

于 2012-08-03T13:56:40.087 回答
-1

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

试试这个:

lock (lockThis)
{
    // Access thread-sensitive resources.
}
于 2012-08-03T13:56:15.833 回答
-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 点。我相信这种方法被称为“控制变量”(如果我错了,请有人纠正我),这里的控制变量是布尔值 isWaitingAtPointA 和 continueWorking。您希望它们都使用的方法在这里由 DoMyStuff() 表示,可以在其他地方定义它以避免代码冗余。

我希望这能激励你 =)

于 2012-08-03T14:36:30.590 回答