2012-10-09 33 views
0

可能重复:
In g++ is C++ 11 thread model using pthreads in the background?C++ 11线程执行后端

我从某处OpenMP使用在Linux系统中PThreads实现。尽管他们似乎对我完全不同的阅读。考虑C++11线程和PThreads我想知道的(相对)相似,

有谁知道,如果C++11线程使用PThreadsgccclang任何其他的多线程库实现的?

+0

OpenMP和PThreads可以混合在一起,但它们是两个不同的东西。你应该看看那里http://stackoverflow.com/questions/3949901/pthreads-vs-openmp和那里http://stackoverflow.com/questions/7433685/mixing-openmp-with-pthreads。 – ForceMagic

+0

关于您对OpenMP和pthreads的评论。 OpenMP只是一组描述如何对应用程序进行线程化的语法和语义。 pthreads是一个实际上提供了线程化应用程序的库。 – CrazyCasta

+1

是的,libg ++使用pthreads。我记得在编译时必须链接到它。 – Pubby

回答

1

有C++ 2011的多线程的多个部分:

  1. 更高层次的抽象,如std::threadstd::mutexstd::condition_variable等这些抽象在并行线程两种libc中的条款++实现(铛的本地库)和libstdC++(gcc的本地库)。 libstdC++使用间接寻址(gthr.h),可用于例如为单个线程实现存根。这从不同的同步类的来源是非常明显的。
  2. 较低级别的同步工具,即原子和各种内存可见性控件,不能从pthread中获得。看起来gcc和clang都使用编译器内置函数来实现这些,这可能会创建适当的指令。然而,我没有追踪到其中任何一个的实际代码。
  3. 在库中实现事物是不够的:编译器需要阻止对同步原语重新排序指令,并且需要在适当的位置使值可见。