@nrailgun
        
        2017-11-01T12:31:05.000000Z
        字数 409
        阅读 1330
    程序设计
观察如下代码:
def producer():set(cond)wakeup()def consumer():while not cond:sleep()
存在问题:如果在 while not cond: 与 sleep() 之间执行了 
wakeup(),那么会导致信号丢失,导致永久睡眠。
显然语句之间应该是不可分割的(Atomic),因此需要加锁保持原子性。 
但是持锁睡眠将导致 producer 永久死锁,因此睡眠必须放弃锁。 
POSIX 的线程条件接口可见一斑。
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);int pthread_cond_signal(pthread_cond_t *cond);
StackOverflow 有一个错误的高票回答,声称“不应持锁唤醒, 
避免其他线程因无法获得锁而再次睡眠”。显然是错误的。
