我有多个线程将项目添加到无锁队列。
然后这些项目由另一个线程处理。
在生产者线程中,我需要启动消费者线程,但前提是它尚未运行或启动。
具体来说:
public void BeginInvoke(Action method)
{
//This runs on multiple background threads
pendingActions.Enqueue(method);
if (ProcessQueue hasn't been posted)
uiContext.Post(ProcessQueue, null);
}
private void ProcessQueue(object unused)
{
//This runs on the UI thread.
Action current;
while (pendingActions.TryDequeue(out current))
current();
}
我使用的是 .Net 3.5,而不是 4.0。 :(
最佳答案
最简单的方法是使用Semaphore
。它将计算队列大小。
关于c# - 我怎样才能确保只有一个线程会做某事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6456571/