【发布时间】:2020-07-21 04:51:13
【问题描述】:
有一个简单的问题。
如果一个线程正在排队而另一个正在出队,我是否必须使用并发队列?在这种情况下(1 位读者和 1 位作者)使用常规容器时是否存在竞争条件/其他风险?
【问题讨论】:
-
是的,你必须这样做。这就是并发结构的用途——避免竞争条件。
-
我在问,因为我知道当有多个写入器访问容器中的相同元素时,您必须使用这种结构,但是 1 个读取器和 1 个写入器的情况对我来说并不那么明显(那里是否有实际的比赛条件)
-
对...我想不出来,但你可以写一个小程序并尝试一下。我认为您会得到的异常(使用常规队列)可能是队列大小/长度不一致......(现在不是通过计算机,所以无法尝试:/)
-
我确实声明这两个操作都会改变查询。如果您想获取队列顶部的元素而不改变它,请使用
Peek而不是Dequeue
标签: c# concurrency thread-safety race-condition concurrent-queue