我可以使用 boost named_semaphore 代替 ACE_SEMAPHORE 吗,因为我正在尝试从 ACE 转移到 boost 库?
Can I use boost named_semaphore in place of ACE_SEMAPHORE as I am trying to move from ACE to boost libraries?
我正在将我的代码从 ACE 库支持转移到增强库支持。我需要替换 ACE_Semaphore。似乎 C++11 不支持信号量方法。我在boost中看到了named_semaphore。我看到的另一个选择是选择 POCO 信号量,我必须在其中包含 POCO 库。请给我一些建议,告诉我哪一种是最好的前进方式。
编辑:这是为了进程内线程同步。
简短的回答是:是的。
如果对于进程内同步,您可以简单地用互斥锁+条件变量模拟一个:
C++0x has no semaphores? How to synchronize threads?
Note though, usually a mutex + condition variable will do, as the concrete condition doesn't usually take the form of a counter. (E.g. Synchronizing three threads with Condition Variable)
对于进程间同步,您使用命名信号量。示例:How to limit the number of running instances in C++ 请注意存在实施差异¹。
¹ 例如named_semaphore 在 boost 中分配它自己的共享资源,而在 ACE 中假定用户从现有的共享 space 中分配它。在 boost 中,你显然也可以,只要你的平台支持共享内存中的本机同步原语
我正在将我的代码从 ACE 库支持转移到增强库支持。我需要替换 ACE_Semaphore。似乎 C++11 不支持信号量方法。我在boost中看到了named_semaphore。我看到的另一个选择是选择 POCO 信号量,我必须在其中包含 POCO 库。请给我一些建议,告诉我哪一种是最好的前进方式。
编辑:这是为了进程内线程同步。
简短的回答是:是的。
如果对于进程内同步,您可以简单地用互斥锁+条件变量模拟一个:
C++0x has no semaphores? How to synchronize threads?
Note though, usually a mutex + condition variable will do, as the concrete condition doesn't usually take the form of a counter. (E.g. Synchronizing three threads with Condition Variable)
对于进程间同步,您使用命名信号量。示例:How to limit the number of running instances in C++ 请注意存在实施差异¹。
¹ 例如named_semaphore 在 boost 中分配它自己的共享资源,而在 ACE 中假定用户从现有的共享 space 中分配它。在 boost 中,你显然也可以,只要你的平台支持共享内存中的本机同步原语