我读过: “Threads Cannot Be Implemented As a library”(http://www.hpl.hp.com/techreports/2004/HPL-2004-209.pdf)我同意那篇文章的主要思想。但是,我有疑问:毕竟,在 C++ 模型 (C++11) 之前,没有对线程的原生支持。但是,Boost 能够提供一个线程作为库。那么,这怎么可能/我误解了什么?
最佳答案
尽管信息仍然相关,但那篇论文有点过时了。从那时起,C++11 引入了几个更新来解决这些问题。特别是,C++11 为处理多线程程序添加了定义更明确的内存模型。这类似于论文中描述的 Java。 C++11 还巩固了 sequence points 的概念,现在称为“排序”,添加了自己的线程库(基于来自 boost 的线程库),并添加了一个原子库,其中包括几个用于处理无锁算法的工具。
因此,C++ 委员会在多线程环境中的行为方面改进了 C++ 语言的规范。而且,他们已经明确定义了一组最小的内存模型期望。
它并不完美,但我们比以前好多了。
我会推荐的信息:
- Anthony Williams 的书:“C++ Concurrency In Action”
- Herb Sutter 的“Atomic Weapons”演讲。
关于c++ - 实现线程作为库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38666757/