C++ 中面向对象信号量的使用
我知道如何在 C 中使用 Unix 信号量。在使用它们之前,我必须调用一个名为 sem_init
的类似构造函数的函数,在使用它们之后,我必须调用一个名为 sem_destroy
的类似析构函数的函数。代码>.
我知道我可以继续在 C++ 中这样做,因为它与 C 向后兼容,但是 C++ 是否有真正的面向对象的方式来使用信号量?
I know how to use Unix semaphores in C. Before using them I must call a constructor-ish function named sem_init
and after using them I have to call a destructor-like function named sem_destroy
.
I know I can keep doing this in C++ because of its backwards compatibility with C, but does C++ have a real object-oriented way to use semaphores?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果您确实坚持使用 POSIX 信号量而不是 Boost,您当然可以将 sem_t 包装在一个类中:
给读者的练习:您可能想要添加异常而不是 C 风格的错误代码,也许还有其他特征。另外,这个类应该是不可复制的。实现这一点的最简单方法是继承
boost::noncopyable
;)编辑:正如 @Ringding 所说,在
EINTR
上循环将是一个非常好的方法。明智的做法。If you really insist on using POSIX semaphores and not Boost, you can of course wrap
sem_t
in a class:Exercise for the reader: You may want to add exceptions instead of C-style error codes and perhaps other features. Also, this class should be noncopyable. The easiest way to achieve that is inheriting from
boost::noncopyable
;)Edit: as @Ringding remarks, looping on
EINTR
would be a very wise thing to do.您应该使用 Boost 库(如果您不知道它们,它们对于 C++ 的作用就像 JDK 对于 Java 的作用一样) )。
Boost.Interprocess 是您需要的库你的问题。它提供了进程间通信机制的抽象。
这个是如何使用信号量的示例。
You should use the Boost libraries (if you don't know them, they are for C++ what the JDK is for Java).
Boost.Interprocess is the library you need for your question. It provides an abstraction over the inter-process communnication mechanisms.
This is an example of how to use semaphores.
C++0x 没有信号量?如何同步线程?
C++0x has no semaphores? How to synchronize threads?