【发布时间】:2012-02-26 15:49:27
【问题描述】:
我想知道在已经获得 Monitor 的线程上调用 Threa.Sleep 是否会在进入睡眠状态之前释放锁:
object o = new object();
Montior.Enter(o);
Thread.Sleep(1000);
Monitor.Exit(o);
当线程被挂起时——其他线程可以获取o吗?
【问题讨论】:
-
在锁内调用 Thread.Sleep 是导致应用程序无响应的秘诀。您应该尽可能在锁内执行最少的工作,否则等待资源的其他线程会堆积起来等待获取锁。
-
@JaredShaver 除了在一大堆情况下,例如锁定将数据发送到从不同线程负载获取数据但如果发送数据太快会崩溃的硬件。
标签: c# .net synchronization locking