【问题标题】:Condition Variable vs Semaphore example条件变量与信号量示例
【发布时间】:2016-11-30 05:55:35
【问题描述】:

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

我的猜测是,在这种特殊情况下,x 是条件变量还是信号量都无关紧要。

感谢您的帮助!

【问题讨论】:

    标签: c multithreading semaphore


    【解决方案1】:

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

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

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

    【讨论】:

    • You can build a semaphore from a mutex and a conditional variable。两者都可以进程共享,并放在共享内存中,从而提供进程间通信机制。
    • @MaximEgorushkin 当然,您可以从另一个构建一个(这是一种性能过度杀伤),但我希望看到带有 IPC 的标准/原生 CV,例如我在 pthread_cond_init 中没有看到这样的选项。
    • 进程共享互斥锁和条件变量已经成为标准几十年了。 pubs.opengroup.org/onlinepubs/9699919799/functions/…
    • @MaximEgorushkin 不知何故我在 Linux 手册中找不到它。但它存在于 pthread.h 中,谢谢!
    猜你喜欢
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 2020-07-12
    • 2010-10-30
    • 1970-01-01
    相关资源
    最近更新 更多