我正在使用Lock访问队列,但是其中一种情况似乎从未执行过lock内部的代码块 我有一个线程每隔几秒钟就会执行以下代码
lock(queueLock){
while(queue.Count > 0){
doSomething(queue.Dequeue());
}
}
另一个线程将根据I / O执行以下代码(不受时间间隔的影响):
lock(queueLock){
queue.Enqueue(input);
}
第二个从不执行锁中的代码。我已经尝试使用调试器或打印程序,但是这似乎可以运行,并且在VS调试器的线程窗口中,看起来该线程只是在尝试获取锁后就死了,而其他线程甚至都没有使用此队列。>
我没有使用.net进行统一编程,但是在这种情况下,除了更新功能之外,我没有使用任何特定的统一性。
答案 0 :(得分:0)
尝试使用不带锁的线程安全ConcurrentQueue。
答案 1 :(得分:0)
最后,问题不在于锁,实际上只是队列入锁之前的一行代码,我将e从json转换为另一个类,并最终抛出一个异常,即未显示统一性我,但是由于我从未在c#中使用多线程,直到最终找到了错误的地方。