在c++中如何声明二进制信号量

In c++ how do you declare a binary semaphore?

本文关键字:声明 二进制 信号量 c++ 何声明      更新时间:2023-10-16

我试图在c++中声明一个二进制信号量。
有没有一种方法可以通过使用信号量X来实现;?
你需要包含的标题是什么?

对不起…我正在使用unix g++

c++语言和标准库没有任何信号量的概念,甚至线程也没有。答案完全取决于你所面向的平台;例如,Windows和Linux系统api支持信号量

由于c++ 2003将在一段时间内出现,所以看看Boost.Thread。你不会在那里找到一个信号量,但对于你想要做的事情来说,这可能太低了。

如果你正在使用的编译器实现(至少线程部分)c++ 11标准库,你会使用std::mutex X;,或可能std::recursive_mutex X;, std::timed_mutex X;std::recursive_timed_mutex X;,这取决于你想要什么功能(缺乏语句来指示否则,我猜你想要std::mutex)。

对于较旧的库,您可能希望使用等效的pthreads。如果需要支持Windows(原生不包含pthreads),可以使用Anthony Williams的pthreads-win32包。这有两个优点:首先,它是Posix和类Posix系统(例如,Linux)的本机,其次,尽管它使用了稍微不同的名称,但基本思想几乎与c++ 11标准库中的基本思想相似,当编译器支持它时,应该很容易更改。

自c++ 20以来,这在标准c++中现在是可能的。请参阅https://en.cppreference.com/w/cpp/thread/counting_semaphore以获取参考和示例。g++ 11, clang 11, msvc标准库19.28