Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使锁等待释放?_C#_Multithreading_Unity3d - Fatal编程技术网

C# 如何使锁等待释放?

C# 如何使锁等待释放?,c#,multithreading,unity3d,C#,Multithreading,Unity3d,我使用Lock访问队列,但其中一种情况似乎从未执行Lock中的代码块 我有一个线程每几秒钟执行一次下面的代码 lock(queueLock){ while(queue.Count > 0){ doSomething(queue.Dequeue()); } } 另一个线程将根据I/O执行以下代码(不由时间间隔决定): 第二个永远无法执行锁内的代码。我已经尝试过使用调试器或打印,但这似乎只是在运行,在VS调试器的threads窗口中,当没有其他线程使用此队列

我使用Lock访问队列,但其中一种情况似乎从未执行Lock中的代码块 我有一个线程每几秒钟执行一次下面的代码

lock(queueLock){ 
    while(queue.Count > 0){
        doSomething(queue.Dequeue());
    }
}
另一个线程将根据I/O执行以下代码(不由时间间隔决定):

第二个永远无法执行锁内的代码。我已经尝试过使用调试器或打印,但这似乎只是在运行,在VS调试器的threads窗口中,当没有其他线程使用此队列时,试图获取锁的线程似乎刚刚死亡


我没有使用.net,我在unity上编程,但在这种情况下,除了更新功能外,我没有使用任何unity特定的功能。

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

最后,问题不在于锁,实际上只是排队锁之前的一行代码,我将e从json转换到另一个类,结果抛出了一个unity没有向我显示的异常,但因为我从未在c#中使用多线程,所以我最终发现了错误的地方。

共享完整的代码示例。可以在给定的代码段中识别问题。如果您只是因为队列而锁定,那么您知道有一个线程安全队列不需要使用锁定,对吗?或者我最喜欢的BlockingCollection@pm100,如果队列为空,为什么第一个调用会被阻塞?
while
不会执行,锁不会被释放吗?所以我不能使用ConcurrentQueue,因为它需要.NET Framework 4.6,正如我之前所说,它是Unity,所以我没有访问.NET Framework的权限。来源如下:您是否确保线程正在调用第二块代码?
lock(queueLock){
   queue.Enqueue(input);       
}