【发布时间】:2016-11-30 05:55:35
【问题描述】:
我很难解决这个家庭作业问题。当 x 是条件变量且 x 是信号量时,在一个线程中调用 x.signal() 和稍后在另一个线程中调用 x.wait() 会产生不同的结果吗?
我的猜测是,在这种特殊情况下,x 是条件变量还是信号量都无关紧要。
感谢您的帮助!
【问题讨论】:
标签: c multithreading semaphore
我很难解决这个家庭作业问题。当 x 是条件变量且 x 是信号量时,在一个线程中调用 x.signal() 和稍后在另一个线程中调用 x.wait() 会产生不同的结果吗?
我的猜测是,在这种特殊情况下,x 是条件变量还是信号量都无关紧要。
感谢您的帮助!
【问题讨论】:
标签: c multithreading semaphore
信号量有一个受原子操作保护的状态,同时条件变量(CV)没有自己的状态,甚至没有受到保护(通常的假设是程序有自己的,比整数更复杂的共享状态因此需要“手动”维护它)。
CV 的正确使用要求信号和等待操作都受到保护(被关联的互斥锁包围),否则等待线程可能会错过信号。因此,程序需要确保 CV 上的锁定顺序正确。
同时,信号量操作对开发人员是隐藏的,代码更简单,不会像 CV 那样出错,但它也通过非常具体的操作保持非常简单/小的共享状态。
【讨论】: