2

我需要同步一个方法调用,以便线程可以在 500 毫秒睡眠后调用这个方法。我有 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();
}
4

2 回答 2

1

如果您知道并发线程的数量(并且考虑到它们大约在同一时间开始),您可以将 aBarrierPostPhaseAction委托一起使用。

 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); 
于 2013-02-25T12:53:04.427 回答
0

使用 System.Threading.Timer

您可以给它一个回调函数以及调用此函数的时间间隔。

于 2013-02-25T12:39:19.870 回答