实现线程作为库

时间:2016-07-29 20:10:55

标签: c++ multithreading boost x86

我读过: "线程无法实现为图书馆" (http://www.hpl.hp.com/techreports/2004/HPL-2004-209.pdf)我同意该文章的主旨。但是,我有疑问:毕竟,在C ++模型(C ++ 11)之前,没有对线程的原生支持。但是,Boost能够提供一个Thread作为库。那么,它有可能/我误解了什么?

2 个答案:

答案 0 :(得分:4)

虽然信息仍然相关,但该文件有点过时了。从那时起,C ++ 11引入了几个更新来解决这些问题。特别是,C ++ 11为处理多线程程序添加了更明确定义的内存模型。这类似于Java,如本文所述。 C ++ 11还巩固了sequence points的概念,现在被称为" sequencing",添加了自己的线程库(基于boost中的一个),并添加了一个原子库,其中包括几个处理无锁算法的工具。

因此,C ++委员会在多线程环境中的行为方面改进了C ++语言的规范。而且,他们已经明确定义了最低限度的内存模型预期。

它并不完美,但我们在一个比我们更好的地方。

我建议的信息:

  • Anthony Williams的书:" C ++并发行动"
  • Herb Sutter" Atomic Weapons"会谈。

答案 1 :(得分:2)

Boost线程充当底层操作系统(Win32线程或POSIX线程)提供的本机线程的包装。

这还取决于编写编译器的人必须定义超出标准本身所要求的行为才能使事情正常工作。

不幸的是,他们定义的内容(以及他们如何定义它)有所不同,这限制了Boost线程可以做多少(尽管他们有相当数量的宏来控制线程本地存储的工作方式,所以你仍然获得半便携式访问相当多的设施。)