我很难解决这个家庭作业问题。当 x 是条件变量和 x 是信号量时,在一个线程中调用 x.signal() 并稍后在另一个线程中调用 x.wait() 是否会产生不同的结果?
我的猜测是,在这种特殊情况下,x 是条件变量还是信号量并不重要。
感谢您的帮助!
最佳答案
信号量有一个受原子操作保护的状态,同时条件变量(CV)没有自己的状态,甚至没有受到保护(通常的假设是程序有自己的、比整数更复杂的共享状态)因此需要“手动”维护它)。
正确使用 CV 要求信号和等待操作都受到保护(由相关的互斥锁包围),否则等待线程可能会错过信号。因此程序需要确保 CV 上的正确锁定顺序。
同时,信号量操作对开发人员隐藏,代码更简单,不会像 CV 那样出错,但它还通过非常具体的操作维护非常简单/小的共享状态。
关于条件变量与信号量示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40881290/