我想启动任意数量的线程,每个线程都执行相同的方法,但参数不同。每个线程都需要在某个点阻塞,并等待所有线程都到达同一点。(就像赛车手进入起跑区一样)
我不知道如何让所有线程向启动器发出信号,表明它们都准备好了。
我想启动任意数量的线程,每个线程都执行相同的方法,但参数不同。每个线程都需要在某个点阻塞,并等待所有线程都到达同一点。(就像赛车手进入起跑区一样)
我不知道如何让所有线程向启动器发出信号,表明它们都准备好了。
解决方案是使用Barrier Class。
我认为使用锁定可以同步线程的访问。
试试这个:
lock (lockThis)
{
// Access thread-sensitive resources.
}
不久前,我还在为多线程而苦苦挣扎。你想要达到的目标可以用你所知道的以一种非常简单的方式完成。这是一个想法:
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() 表示,可以在其他地方定义它以避免代码冗余。
我希望这能激励你 =)