我需要同步方法调用,以便线程可以在500ms睡眠后调用此方法。我有10个可以同时运行的线程,因此简单地引入Thread.Sleep(500)
没有帮助。我怎样才能以最简单的方式实现这一目标?你有什么建议吗?
_pool = new Semaphore(0, 10);
_pool.Release(10);
...
pool.WaitOne();
Thread thr = new Thread(WorkerThread);
t.Start(param);
...
public static void WorkerThread(object parameterData)
{
...
MethodToBeSynced();
...
_pool.Release();
}
答案 0 :(得分:1)
如果您知道并发线程的数量(并且考虑到它们大约在同一时间开始),您可以使用Barrier
和PostPhaseAction
代理。
var barrier = new Barrier(10, (x) => Thread.Sleep(500));
屏障等待直到10个线程处于某个代码点,一旦发生这种情况,每个线程将休眠500毫秒然后继续。
如果确切的线程数未知,则可以指定等待超时以不阻止无限。
// Waits up until N threads are at the barrier or after the timeout has elapsed.
_barrier.SignalAndWait(500);
答案 1 :(得分:0)
使用System.Threading.Timer
您可以给它一个回调函数以及调用此函数的时间间隔。