条件变量与信号量示例

标签 c multithreading semaphore

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

我的猜测是,在这种特殊情况下,x 是条件变量还是信号量并不重要。

感谢您的帮助!

最佳答案

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

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

同时,信号量操作对开发人员隐藏,代码更简单,不会像 CV 那样出错,但它还通过非常具体的操作维护非常简单/小的共享状态。

关于条件变量与信号量示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40881290/

相关文章:

c - Fork()之后,如何留在父进程中?

c - 按位与表达式中操作数的可能值

android - 即使我得到另一个实例,也可以从正确的线程进行 Realm 访问

java - 对不同的数据库建立不同的连接并将其放入列表中

linux - BASH...GNU 并行

c - 从函数返回指针作为静态变量

c - 错误: array type has incomplete element type - already defined structs

java - 使用 protected block 同步 Hibernate 插入

java - 信号量公平参数不遵循先进先出