我试图在C ++中声明一个二进制信号量
有没有办法通过使用Semaphore X来做到这一点; ?
你需要包含什么标题?
抱歉......我正在使用unix g ++
答案 0 :(得分:4)
C ++语言和标准库没有信号量甚至线程的任何概念。答案完全取决于你正在做什么平台;例如,Windows和Linux系统API支持信号量。
答案 1 :(得分:2)
由于C ++ 2003将会出现一段时间,因此请查看Boost.Thread
。你不会在那里找到一个信号量,但这可能是你想要做的事情的水平太低了。
答案 2 :(得分:1)
如果您正在使用的编译器(至少是C ++ 11标准库的线程部分),您可以使用std::mutex X;
,或者可能使用std::recursive_mutex X;
,std::timed_mutex X;
或std::recursive_timed_mutex X;
,取决于你想要的能力(缺少对陈述的陈述,我猜你想要std::mutex
)。
使用较旧的库,您可能希望使用等效的pthreads
。如果您需要支持Windows(本机不包含pthread),您可以使用Anthony Williams的pthreads-win32包。这有两点好处:第一,它是Posix和Posix类系统(例如Linux)的原生,第二,虽然它使用略有不同的名称,但它的基本思想几乎与C ++ 11标准库中的一样,它当你的编译器支持它时,应该很容易改变它。
答案 3 :(得分:0)
从 C++20 开始,这在标准 C++ 中是可能的。请参阅 https://en.cppreference.com/w/cpp/thread/counting_semaphore 以获取参考和示例。受编译器支持:g++ 11、clang 11、msvc 标准库 19.28