在使用Win32线程模型时,MinGW-w64是否支持开箱即用的std::线程
Does MinGW-w64 support std::thread out of the box when using the Win32 threading model?
我在安装MinGW-w64工具链时选择了Win32线程模型,因为我了解到它提供了比POSIX更好的性能。我自己没有资格对这种说法进行基准测试,但这里有一个消息来源。
起初,我认为这个选项只会影响GCC运行时的内部工作,而不会阻止我在代码中使用C++11线程,基于这个答案和其他用户rubenvb的评论。
然而,情况似乎并非如此。此MinGW-w64安装中似乎不存在std::thread
支持。
我从命令行调用g++,除了-std=c++11
之外没有其他选项。
在这一点上,我不确定是否:
-
ruenvb是错误的,实际上有必要在POSIX线程模型下安装MinGW-w64,以便编译我的代码,该代码依赖于C++11
thread
库,或者 - 我完全误解了这一切,或者
std::thread
实际上在我的场景中是受支持的,只是不直观
我强化了";开箱即用";标题中的部分。存在一个名为mingw-std线程的库,如下面的答案所示。然而,作为第三方选择,它与这个问题无关。
那么,截至今天(2016年5月),当使用Win32内部线程模型安装时,MinGW-w64是否本机支持依赖于std::thread
的代码?
要将MinGW-w64与Win32本机线程一起使用,可以安装MinGW-std线程头。
如该页所述,这是因为MinGW-w64是GCC的一个端口,但GCC不包括任何本地线程支持。相反,GCC安装通常通过作为glibc一部分的gthreads或pthreads来实现线程。MinGW-w64不包括glibc端口。(相反,它使用MSVC运行时的组合,加上自己的代码来填补漏洞)。
同样如该页所述,最新版本的MinGW-w64确实包括pthread的Win32端口("winpthread"),这解释了为什么可以通过从MinGW-w64安装程序中选择"pthred"模型来让线程"开箱即用"地工作。
相关文章:
- 为什么std::async使用同一个线程运行函数
- 在std::thread中,joinable()然后join()线程安全吗
- 在main()之外初始化std::vector会导致性能下降(多线程)
- MESI协议和std::atomic-它是否确保所有写入立即对其他线程可见?
- 使用 std::string () const 函数启动线程或未来
- 用C++中的std::condition_variable将线程置于死锁中会有风险吗
- 即发即弃 std::线程对象清理自身
- std::mutex 如何防止线程修改?
- std::线程导致程序中止
- 如果在 2 个线程中使用,是否值得将size_t声明为 std::atomic?
- std::cout 来自多个线程
- 简单使用 std::atomic 在两个线程之间共享数据
- std::线程不是全局变量,但在到达创建它的函数的末尾时不会超出范围?
- 线程 std::调用未知类型,无法专门化函数错误
- 使用 std::chrono::steady_clock 对线程/异步中的代码进行基准测试
- 带有 std::cout 的多线程控制台文本动画
- 线程不是 std c++ 的成员
- ZeroMQ 在使用 std::thread 创建工作线程时崩溃
- 使用 std::condition_variable 触发其他线程.使用哪些互斥锁?
- 使用多线程(std::async、std::thread或?)加速