我正在从ACE库支持移动我的代码以提升库支持。我需要替换ACE_Semaphore。似乎C ++ 11不支持信号量方法。我在boost中看过named_semaphore。我看到的另一个选择是去POCO信号量,在那里我必须包括POCO库。请告诉我哪些是前进的最佳方式。
编辑:这是用于进程内线程同步。
答案 0 :(得分:2)
简短的回答是:是的。
如果对于进程内同步,您只需使用互斥+条件变量模拟一个:
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中,您显然也可以,只要您的平台支持共享内存中的本机同步原语