我可以使用boost named_semaphore来代替ACE_SEMAPHORE,因为我试图从ACE移动到增强库吗?
问题描述:
我正在从ACE库支持移动我的代码以提高库支持。我需要替换ACE_Semaphore。看来C++ 11不支持信号量方法。我已经看到了named_semaphore的提升。我看到的另一种选择是去POCO信号灯,在那里我必须包含POCO库。请告诉我哪些是最好的前进方向。我可以使用boost named_semaphore来代替ACE_SEMAPHORE,因为我试图从ACE移动到增强库吗?
编辑:这是为进程内线程同步。
答
简短的回答是:是的。
如果进程内同步,你可以简单地模仿一个用互斥锁+条件变量:
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中,只要您的平台支持共享内存中的本机同步原语,您显然也可以这样做。
它用于进程内通信。我也会编辑我的问题。谢谢(你的)信息。 – C0D3R