我想启动任意数量的线程,每个线程执行相同的方法,但使用不同的参数。每个线程需要在某一点阻塞,并等待所有线程到达同一点。 (就像赛车手进入他们的起跑线一样)
我很难理解如何让所有线程向初学者发出信号,告知他们每个人都准备好了。
答案 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()表示,可以在其他地方定义以避免代码冗余。
我希望这会激励你=)