【发布时间】:2012-08-08 23:38:12
【问题描述】:
假设我们有两个线程使用下面执行的方法:
while(true){
if(Queue.Count() <= 0){
wait();
}
object anObject = Queue.Dequeue();
}
现在问题出现在 Queue 有一个元素 init 时,线程 1 即将执行 Queue.Count 行,线程 2 大约在 Queue.Dequeue() 上,执行优先级在线程 1 上。
当这种情况发生时,线程 1 将抛出异常,因为 Queue.Count() 将返回 1 并尝试从空队列中取出对象。我该如何处理?如果我想安全地出队,最好的解决方案是什么?我应该使用同步还是锁定某些东西?
最好的问候, 凯末尔
【问题讨论】:
-
考虑看看 TPL DataFlow 库。对排队的线程异步的东西有好处,让你保持清醒!这是一个入门:microsoft.com/en-us/download/details.aspx?id=14782
标签: c# concurrency parallel-processing