对于多线程并行的标准化支持对于C++来说是一个新东西。只有在C++11中你才可以写不依赖于系统扩展库的多线程程序。为了弄清新C++线程库,了解他的历史是很重要的。
1.3.1 C++多线程的历史
1998年C++标准没有意识到线程的存在,这导致许多的程序按照顺序的结构被编写。不仅仅如此,内存模型也没有标准定义,所以你离开指定编译器不能用1998C++写多线程程序.
当然,编译器厂商可以免费对语言添加扩展,而且多线程C API的流行-比如POSIX C标准和Microsoft Windows API-已经引领C++编译器厂商支持多线程的扩展,编译器支持通常只限于允许使用此平台的C API让C++运行库工作在多线程下。尽管很少有编译器提供正式的多线程内存模型,编译器和处理器已经可以很好的支持多线程的C++程序了。
不满足使用特定平台的C API 处理多线程。 C++ 程序员已经依赖他们的类库提供了面向对象的多线程支持,例如MFC程序框架和多用途的C++库,例如Boost和ACE已经封装了底层的API,提供更高级的简化任务的多线程工具。虽然类库多种多样,尤其是在启动新线程的时候,类的结构有很多相似。C++类库一个非常重要并且有利于程序员的设计,RAII(资源分配初始化)锁的使用确保当离开范围的时候互斥锁是打开的。
大多数情况下,编译器联合特定平台的API和跨平台的类库比如Boost和ACE为使用C++写多线程程序提供的坚实基础,但是标准的缺乏意味着缺乏线程感知的内存模型会引起问题,特别是对于想使用处理器提高程序性能或者编译器在各种平台间的跨平台性。
1.3.2 新标准的同步支持
所有的改变都是随着C++11的发布,不仅有了一个崭新的线程感知的内存模型,而且C++标准库已经包含了管理线程的类,带保护的共享数据,线程间同步,和底层原子操作。
新的C++线程库很大程度上是基于前面的C++类库。特别是,Boost线程库成为新类库最初的模型,许多类的名字和结构是Boost的升级版。由于新标准已经形成,这是一个双向的流动。boost类库在很多方面做了他自己的改变去适应新的C++标准,所以从Boost过度的用户应该发现很多相似的地方。
同步支持知识新标准的一个,语言上有许多加强的地方使程序员感觉写起来更容易。尽管这已经超出了本初的范畴,但是这些改变已经直接影响了线程库和它被使用的方式。附录A提供了一个对这些语言特性简洁的介绍。
原子操作的支持使程序员可以不使用平台指定扩展语言写出更加有效的程序,这是一个真正的高效可移植代码,编译器不仅要考平台,还要考虑优化操作,使程序最佳化