【发布时间】:2013-01-22 22:43:50
【问题描述】:
如果一个线程试图获取一个锁并且它被占用了,它应该进入休眠状态并保持休眠状态直到锁被释放。如果一个线程释放了一个锁(它被创建它的线程占用),它应该唤醒线程。
我的问题是,如果我们唤醒锁定地址上的所有线程与锁定地址上的单个线程(锁定释放后),这有什么不同吗?如果我们要唤醒单个线程,那么唤醒哪个线程有意义,第一个在锁定地址上进入睡眠状态?
我可以看到唤醒一个线程的一些优势,如果我们唤醒所有线程,n-1 可能会重新进入睡眠状态。但是不知道单线程唤醒有没有坏处。
【问题讨论】:
-
如果它是一个锁(互斥锁,临界区),唤醒多个线程等待它的意义何在?为什么“他们可能重新入睡”,而这似乎是唯一可能发生的事情?
标签: synchronization operating-system thread-safety locking block