在c++中如何声明二进制信号量
In c++ how do you declare a binary semaphore?
我试图在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
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- .cpp和.h文件中的模板专用化声明
- 未在作用域中声明unordered_map
- C++避免重复声明的语法是什么
- 有根的二进制搜索树.保留与其父级的链接
- 如何确保C++函数在定义之前声明(如override关键字)
- 错误:未在此范围内声明'reverse'
- 多态二进制函数
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 为什么在定义函数之前先声明它
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- #ifdef和未声明的标识符
- 没有显式声明的int[]中的foreach
- 为什么我不能定义一元运算符,然后在 MSVC 的模板类中声明具有相同名称的友元二进制运算符?
- 二进制加法过载声明语法错误
- 没有变量声明为函数,但错误:二进制表达式的操作数无效
- 如何为模板化类声明类外二进制运算符
- 从GCC 2.95生成的ELF二进制文件中恢复c++类声明
- 当数字声明为uint32和uint64时,将整数转换为二进制会显示不同的输出
- 在c++中如何声明二进制信号量