在g++中是使用pthreads作为后台的C++11线程模型
In g++ is C++ 11 thread model using pthreads in the background?
我只是在尝试g++ 4.6
和C++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
)试图解决那些缺失的函数时,就会出现分段冲突。
相关文章:
- MSVC是否支持C++11样式的属性而不是__declspec
- 创建LinkedList退出,返回代码为-11(SIGSEGV)
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 如何将模板转换为C++11之前的模板
- c++11评估顺序(未定义的行为)
- C++中的VLA,扩展名为std=C++11
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- "类模板示例<int>;"语句对 C++11 是什么意思?
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 如何使用lock_guard在c++11中实现scoped_lock功能
- C++11 中不同类型的对象的 std::array 的替代方案
- 为什么 -mmacosx-version-min=10.10 不阻止使用标记为从 10.11 开始的函数?
- 为什么我的C++代码中出现'Segmentation Fault: 11'行?
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- 别名模板的专业化 C++11 中没有开销的最佳替代方案
- STLPort using C++11
- Qt 5.11.2 (Clang 8.0 (Apple), 64 位), 找不到 QJSEngine 文件
- 在 C++11 中,如何查找并返回以给定字符串开头的字符串向量中的所有项?
- 在g++中是使用pthreads作为后台的C++11线程模型