在g++中是使用pthreads作为后台的C++11线程模型

In g++ is C++ 11 thread model using pthreads in the background?

本文关键字:后台 C++11 模型 线程 pthreads g++      更新时间:2023-10-16

我只是在尝试g++ 4.6C++11功能。每次我使用-std=c++0x标志编译一个简单的线程代码时,它要么因分段错误而崩溃,要么只是抛出一些奇怪的异常。

我读到了一些与C++11线程相关的问题,我意识到,我还需要使用-pthread标志来正确编译代码。使用-pthread工作得很好,我能够运行线程化代码。

我的问题是,C++11多线程模型是否在后台使用Pthreads?还是从头开始写的?

我不知道是否有任何成员是gcc的贡献者,但我只是好奇。

如果运行g++ -v,它将为您提供一系列关于它是如何配置的信息。其中一件事通常是一条看起来像的线

Thread model: posix

这意味着它被配置为使用pthreads作为其线程库(libstdc++中的std::thread),也意味着您还需要使用系统上pthread可能需要的任何标志(Linux上的-pthread)。

这与标准无关,它只是g++如何实现标准的细节

C++没有指定如何实现线程。在实践中,C++线程通常被实现为预先存在的系统线程库(如pthreads或windows线程)上的瘦包装器。甚至还提供了使用std::thread::native_handle()访问底层线程对象的功能。

它崩溃的原因是,如果不指定-pthreads-lpthreads,则会链接来自libc的许多弱定义的pthreads存根函数。这些存根函数足以让您的程序无错误地链接。然而,实际创建pthread需要完整的libpthread.a库,当动态链接器(dl)试图解决那些缺失的函数时,就会出现分段冲突。