【发布时间】:2010-01-14 11:12:10
【问题描述】:
我有一个 .NET 队列对象。生产者线程做Enqueue操作,入队的数据是一个byte[]数组,而另一个消费者线程对同一个队列对象做Dequeue操作。
我使用锁来处理并发。我的代码似乎一直运行良好,但昨天发生了奇怪的事情。我从消费者线程得到的数据和我产生的数据不一样:数组长度错误、重复数组……这是线程安全保护失败造成的吗?
在我看来,并发只会导致数据丢失。
我在这里的第一篇文章,请多多包涵。
【问题讨论】:
-
您能告诉我们您使用什么机制来锁定吗?例如带有非常短的代码示例。
-
并发问题会导致数据损坏或不一致。它可能是数据丢失、重复数据、损坏的数据,甚至是异常。会发生什么取决于您的实施。如果没有看到您正在做什么的示例,没有人会知道您的问题是什么。
-
感谢您的 cmets!我只是使用监视器来做“锁定” get { Monitor.Enter(mQueue);字节[] 数据 = mQueue.Dequeue(); Monitor.Exit(mQueue);返回数据; } 设置 { Monitor.Enter(mQueue); mQueue.Enqueue(值); Monitor.Exit(mQueue);这有什么问题?
标签: .net multithreading queue unsafe