【发布时间】:2017-03-13 03:38:50
【问题描述】:
这是Can C++11 condition_variables be used to synchronize processes?的后续行动。
std::condition_variable 对象可以用作计数信号量吗?
我认为不是因为对象似乎绑定到 std::mutex,这意味着它只能用作二进制信号量。我在网上查过,包括here、here 和here,但找不到使用这些对象作为计数信号量的参考或示例。
【问题讨论】:
-
为什么要寻找类似信号量的对象?阅读上面的文字让我认为您可能需要为单核机器构建程序并希望使用该信号量机制,或者您有非常旧的代码使用围绕 OS 信号量的包装器并且您希望保留它行为。是不是有点接近了?
-
@AhiyaHiya:这是个人学习的学术练习。我正在编写有趣的代码,并尝试从基于 posix 的同步机制(pthread_mutex_t、sem_t)迁移到 C++11 原生机制。我看到 C++11 提供了
std::mutex然后很困惑为什么没有信号量。一些进一步的阅读使我了解到std::condition_variable用于实现半信号量功能,但我正在尝试学习/理解它的功能和局限性。它似乎不完全等同于信号量,但我还不确定......还在学习。 -
如果您正在学习并希望看到一些基础良好的多核并发/并行编程指南,您应该查看 Herb Shutter 的“有效并发”系列中的并发编程支柱:herbsutter.com/category/effective-concurrency
标签: c++ multithreading c++11 semaphore condition-variable