条件变量与信号量示例

时间:2016-11-30 05:55:35

标签: c multithreading semaphore

我很难解决这个家庭作业问题。当x是条件变量并且x是信号量时,在一个线程中调用x.signal()以及在另一个线程中调用x.wait()会产生不同的结果吗?

我的猜测是,在这种特殊情况下,如果x是条件变量或信号量,它就不重要。

谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

信号量具有受原子操作保护的状态,同时条件变量(CV)没有自己的状态,甚至没有受到保护(通常的假设是程序有自己的,更复杂的共享状态而不仅仅是整数因此需要“手动”维护它。)

正确使用CV要求信号和等待操作都受到保护(由相关的互斥锁定包围),否则等待线程可能会错过信令。因此程序需要确保CV上的正确锁定顺序。

与此同时,信号量操作对于开发人员来说是隐藏的,并且代码更简单,并且不能以CV的方式出错,但它也可以通过非常具体的操作维护非常简单/小的共享状态。