【问题标题】:Can I use boost named_semaphore in place of ACE_SEMAPHORE as I am trying to move from ACE to boost libraries?当我试图从 ACE 迁移到 boost 库时,我可以使用 boost named_semaphore 代替 ACE_SEMAPHORE 吗?
【发布时间】:2018-03-07 15:43:51
【问题描述】:

我正在将我的代码从 ACE 库支持转移到增强库支持。我需要更换 ACE_Semaphore。似乎 C++11 不支持信号量方法。我在 boost 中看到了 named_semaphore。我看到的另一个选择是使用 POCO 信号量,其中我必须包含 POCO 库。请给我建议,哪个是前进的最佳方式。

编辑:这是用于进程内线程同步。

【问题讨论】:

    标签: c++11 boost semaphore boost-thread ace


    【解决方案1】:

    简短的回答是:是的。

    如果是进程内同步,你可以简单地用互斥体+条件变量模拟一个:

    C++0x has no semaphores? How to synchronize threads?

    但请注意,通常使用互斥体 + 条件变量即可,因为具体条件通常不采用计数器的形式。 (例如Synchronizing three threads with Condition Variable

    对于进程间同步,您使用命名信号量。一个示例:How to limit the number of running instances in C++ 请注意,存在实施差异¹。

    ¹ 例如boost 中的 named_semaphore 分配它自己的共享资源,而在 ACE 中,它假定用户从现有共享空间中分配它。在 boost 中,你显然也可以,只要你的平台支持共享内存中的本机同步原语

    【讨论】:

    • 用于进程内通信。我也会编辑我的问题。感谢您的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 2019-02-21
    • 2014-01-25
    相关资源
    最近更新 更多