如何进行锁定,直到其释放为止?

时间:2018-09-26 18:27:30

标签: c# multithreading unity3d

我正在使用Lock访问队列,但是其中一种情况似乎从未执行过lock内部的代码块 我有一个线程每隔几秒钟就会执行以下代码

lock(queueLock){ 
    while(queue.Count > 0){
        doSomething(queue.Dequeue());
    }
}

另一个线程将根据I / O执行以下代码(不受时间间隔的影响):

lock(queueLock){
   queue.Enqueue(input);       
}

第二个从不执行锁中的代码。我已经尝试使用调试器或打印程序,但是这似乎可以运行,并且在VS调试器的线程窗口中,看起来该线程只是在尝试获取锁后就死了,而其他线程甚至都没有使用此队列。

我没有使用.net进行统一编程,但是在这种情况下,除了更新功能之外,我没有使用任何特定的统一性。

2 个答案:

答案 0 :(得分:0)

尝试使用不带锁的线程安全ConcurrentQueue

答案 1 :(得分:0)

最后,问题不在于锁,实际上只是队列入锁之前的一行代码,我将e从json转换为另一个类,并最终抛出一个异常,即未显示统一性我,但是由于我从未在c#中使用多线程,直到最终找到了错误的地方。