如果不使用C++11,安东尼威廉的"C++ Concurrency in action"是一本合适的书吗?



我愿意从并发中学到更多,我发现这本书有很多好评。但在看了序言之后,我担心它非常关注仅包含在C++11中的STD函数。

由于C++11还不太常用,而且在我的工作场所也根本不常用,所以我需要知道,当我应该读另一本书时,读这本书是否会浪费时间。

我专注于Windows开发,但我喜欢在UNIX和Windows中使用标准库。对这本书有什么推荐或评论吗?

不,本书大量使用C++11语法。

此外,书中讨论的不仅仅是C++11库的特性,例如C++11内存模型在C++11中是一个全新的东西(C++98没有认识到MT的存在)。

尽管如此,IMHO你应该从:nuwen.net获得一个超级容易安装的g++4.9+提升,或者只需获得VS2013社区。

因为C++11是标准的,我想你很快就会开始在工作场所使用它(如果不是引用安德烈·亚历山德雷斯库的话:"给你的猎头打电话!")。Btw std::thread和CCD_。

你说得对,它主要关注C++11。正如副标题所示,这是"实用的多线程"。

如果你不使用C++11,你可能会感兴趣的唯一方法是,如果你计划使用boost线程,这是C++11线程的基础。但你必须知道它们并不完全相同,因为C++11做了一些更改。(例如,在C++11中,你必须决定是等待线程完成,还是让它自己运行。在boost中,它默认情况下自己运行。如果你在C++11中不选择,你的程序将终止)。

那么,对于你作为一名对其领域感兴趣的C++开发人员的一般知识,这是一本推荐读物。C++11的书目前还不多。

下一代Visual C++将在整整两周后推出,其中包括std::thread库,如果我没有弄错的话,G++已经包含了。我不认为这是对的。事情是这样的:C++11真的很重要。如果你的工作场所不打算迁移,我会找另一个工作场所。

由于

  • 您正在搜索一本关于并发性的书
  • 您想要使用一个同时适用于windows和unix的库
  • 您想使用C++,但不想使用C++11

你可能需要使用Boost.Thread.

你会读这本书的原因如下:

  • 我不知道有什么关于Boost线程的书
  • 本书的作者多年来一直是Boost.Thread的主要开发人员和维护人员
  • C++11线程与Boost线程非常相似(作者写道:"大多数示例可以通过明智的方式修改,以使用Boost线程库用boost::替换std::,并使用适当的#include指令。")

我认为这是一本非常有趣的书,即使你不知道多线程的东西。就像在一个结构中创建两个互斥体一样,当您从两个核心切换到两个处理器时会出现问题。还有很多设计模式。从这本书中,你将学习到什么是ABA问题等。此外,boost线程(不需要c++11x)与c++11线程非常相似。你会坚持使用smart_ptrs,也许是水槽图案,RAII等等。这是一本很棒的书。

请注意,即使是现在,示例G++中也没有实现所有功能。http://gcc.gnu.org/projects/cxx0x.html

老实说,你肯定已经开始学习新的c++了,你什么时候接触它只是时间问题。

我还没有读过这本书,但如果你不清楚并发性,那么首先要做的就是阅读、使用和理解一个多线程系统。

然后对另一个系统进行同样的操作,并仔细注意与您已经知道的系统的差异。当您发现差异时,开始四处阅读,看看许多不同的系统是如何处理这方面的并发性的。

如果你目前正在开发一个多线程程序,那么你研究的第一个系统应该是你主要开发的系统,因为在你了解该系统的并发模型之前,你可能会通过复制和粘贴现有代码来破坏事物和/或编程。所以这可能是Windows、pthreads、Boost、TBB或其他已经存在的东西。不过,C++11可能是第二个系统的有力候选者。

否则,我认为你先学习哪一个没有太大区别。OK C++11的一个小缺点是,除了PDF之外,它还不存在——你必须安装一些仍在快速开发中的编译器版本,也许暂时使用Boost线程而不是std::thread,也许书中的一些代码示例无法编译,你必须解决缺乏的功能。所以,不要在你的工作场所尝试书中关于生产代码的实验(我的意思是,你无论如何都不会,对吧?)。

老实说,更不用说C++了,学习Java并发模型仍然是理解并发的一个合理开端。或者Go:它有一些非常好的抽象,需要半天的时间才能得到它的要点,它会向你展示你应该如何希望并发程序工作,假设没有丑陋的复杂情况迫使你这样做。当然,你不会在专业C++工作中立即使用Java、Go或C++11中的所有知识,但它可能仍然值得拥有。

最新更新