C++11 condition_variables 可以用来同步进程吗?

Posted

技术标签:

【中文标题】C++11 condition_variables 可以用来同步进程吗?【英文标题】:Can C++11 condition_variables be used to synchronize processes? 【发布时间】:2016-10-30 20:23:54 【问题描述】:

我正在尝试了解 C++11 的 std::condition_variable。我已经阅读了cppreference.com 和cplusplus.com 以及C++0x has no semaphores? How to synchronize threads? 的文章。

我认为这三篇著名文章没有回答我的问题是:可以使用std::mutexstd::condition_variable 的组合创建的“信号量”(请参阅​​C++0x has no semaphores? How to synchronize threads? 的答案)用于以posix命名信号量的方式在进程之间进行同步?我不清楚是否可以实现此功能,因为我没有看到用于创建这些对象的“可共享”信息,例如名称。

【问题讨论】:

【参考方案1】:

不,这些是为了在一个进程中同步线程,而不是进程。

进程间通信是通过使用共享文件来实现的。进程间互斥体或共享内存只是一个文件(例如在您的临时文件夹中创建),用于在两个进程之间交换信息(数据、锁)。 boost::interprocess 提供了一个很好的实现(它不需要任何链接,代码是动态编译的,你只需要包含它)。

要同步进程,您应该查看boost::interprocess。它提供synchronization mechanisms。它提供了interprocess semaphore。

【讨论】:

我应该和我原来的问题一起问这个问题,但是:看起来 std::condition_variable 也不能像计数信号量一样使用,对吧?我看到它使用了 std::uniqe_lock<:mutex>,所以它看起来只能用作二进制信号量,对吧? @StoneThrow:我会说是的,但你应该问一个单独的问题以获得明确的答案。【参考方案2】:

与标准 C++ 中的 IPC(进程间通信)最接近的是文件 io。

标准 C++ 中没有内存中的 IPC。

【讨论】:

以上是关于C++11 condition_variables 可以用来同步进程吗?的主要内容,如果未能解决你的问题,请参考以下文章

通过c++11的condition_variable实现的有最大缓存限制的队列

[多线程]C++11多线程-条件变量(std::condition_variable)

C++11的condition_variable实现WaitForSingleObject功能

[C++11 多线程同步] --- 条件变量

[C++11 多线程同步] --- 条件变量

[C++11 多线程同步] --- 条件变量