C++11 的 std::thread 是不是与 POSIX 信号量兼容?
Posted
技术标签:
【中文标题】C++11 的 std::thread 是不是与 POSIX 信号量兼容?【英文标题】:Is C++11's std::thread compatible with POSIX semaphores?C++11 的 std::thread 是否与 POSIX 信号量兼容? 【发布时间】:2021-12-10 00:59:18 【问题描述】:我想通过使用标准 C++ std::thread 库在我的 C++ 应用程序中使用线程,但是你想使用信号量并且使用 C++20 的信号量是不可能的,我想知道 POSIX 信号量 与 C++ STD 的线程兼容,否则我必须更改代码才能使用 POSIX 线程
【问题讨论】:
C++ 标准没有提到 POSIX 信号量,但您所说的“兼容”究竟是什么意思? 它是不兼容的,我会使用“兼容”这个词。您可能能够公开基础(假设在您的平台上它们是 POSIX 线程)并使用 POSIX 信号量与这些内部进行互操作;这可能是一次教育之旅。 POSIX 信号量会阻塞 std::threads 吗?还是 POSIX 信号量只能阻塞 POSIX 线程 【参考方案1】:C++ 标准库将 std::thread 实现为 POSIX 系统上 pthread 的包装器,因此使用
出于这个原因,从线程调用sem_wait()
(无论是pthread_t
还是std::thread)将具有相同的效果,尽管只使用pthread 可能会更好,因为它们将是最“兼容”,尤其是因为无论如何您只针对 POSIX 系统。
【讨论】:
以上是关于C++11 的 std::thread 是不是与 POSIX 信号量兼容?的主要内容,如果未能解决你的问题,请参考以下文章
c++11的std::thread能用类的成员函数构造一个线程吗?语法怎样?
是否有任何理由应该将 C++ 11+ std::mutex 声明为全局变量,而不是作为函数参数传递给 std::thread ?