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

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

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

【问题讨论】:

    标签: c++ multithreading c++11 semaphore condition-variable


    【解决方案1】:

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

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

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

    【讨论】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2022-01-10
      • 2015-03-11
      • 2016-05-25
      • 1970-01-01
      • 2017-08-24
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      相关资源
      最近更新 更多