我愿意从并发中学习更多,我发现这本书有很多好评。但是看了前言,恐怕它非常关注仅包含在 C++11 中的 STD 函数。
由于 C++11 还不是很常用,而且在我的工作场所根本没有,我需要知道在我应该阅读另一本书时阅读这本书是否会浪费时间。
我专注于 Windows 开发,但我喜欢在 UNIX 和 Windows 中使用标准库。对这本书有什么建议或说明吗?
我愿意从并发中学习更多,我发现这本书有很多好评。但是看了前言,恐怕它非常关注仅包含在 C++11 中的 STD 函数。
由于 C++11 还不是很常用,而且在我的工作场所根本没有,我需要知道在我应该阅读另一本书时阅读这本书是否会浪费时间。
我专注于 Windows 开发,但我喜欢在 UNIX 和 Windows 中使用标准库。对这本书有什么建议或说明吗?
不,本书大量使用 C++11 语法。
书中讨论的东西也不仅仅是 C++11 库特性,例如 C++11 内存模型是 C++11 中的一个全新事物(c++98 不承认 MT 的存在)。
仍然恕我直言,您应该从以下位置获得超级容易安装的 g++4.9+boost:nuwen.net 或者只是获得 VS 2013 社区。
因为 C++11 是标准,我猜你很快就会开始在你的工作场所使用它(如果不是引用 Andrei Alexandrescu 的话:“打电话给你的猎头!”)。顺便说一句std::thread
,boost::thread
它们非常相似,但有显着差异。
你说得对,它主要关注 C++11。正如副标题所暗示的那样,它是“实用的多线程”。
如果您不使用 C++11,您可能会感兴趣的唯一方法是您计划使用 boost 线程,这是 C++11 线程的基础。但是你必须知道它们并不完全相同,因为 C++11 做了一些改变。(例如,在 C++11 中,您必须决定是等待线程完成还是让它自行运行。在 boost 中,默认情况下它会自行运行。如果您不在 C++11 中选择,您的程序将终止)。
然后,对于您作为对其领域感兴趣的 C++ 开发人员的一般知识,推荐阅读。C++11 书籍目前还不是很多。
自从
您可能需要使用 Boost.Thread。
那时你会读这本书有一些原因:
将在整整两周后发布的下一代 Visual C++ 包含std::thread
库,如果我没记错的话,G++ 已经包含库了。我不会把它算在内。事情是这样的:C++11 真的非常重要。如果您的工作场所不打算迁移,我会寻找另一个工作场所。
我认为即使您不了解多线程的东西,这也是一本非常有趣的书。就像在一个结构中创建两个互斥锁一样,当您从两个内核切换到两个处理器时会出现问题。还有很多设计模式。从这本书中,您将通过示例了解什么是 ABA 问题等。此外,boost 线程(不需要 c++11x)与 c++11 线程非常相似。你会坚持使用 smart_ptrs,也许是 sink 模式,RAII 等等。这是一本很棒的书。
请注意,即使现在并非所有功能都在示例 G++ 中实现。http://gcc.gnu.org/projects/cxx0x.html
老实说,您肯定会开始学习新的 c++,但您何时必须接触它只是时间问题。
我没有读过这本书,但是如果你对并发不清楚,那么首先要做的是阅读、使用和理解一个多线程系统。
然后对另一个系统执行相同的操作,并仔细注意与您已经知道的系统的差异。当您发现差异时,请开始阅读以了解许多不同的系统如何处理该方面的并发性。
如果您目前正在开发多线程程序,那么您研究的第一个系统应该是您主要工作的系统,因为在您了解该系统的并发模型之前,您可能会破坏事物和/或编程复制和粘贴现有代码。所以这很可能是 Windows、pthreads、Boost、TBB 或其他已经存在的东西。不过,C++11 可能是第二个系统的有力候选者。
否则,我认为你先学习哪一个不会有太大的不同。好的 C++11 有一个小小的缺点,它除了 PDF 之外还不存在——你必须安装一些仍在快速开发中的编译器版本,并且可能std::thread
暂时使用 Boost 线程,并且也许书中的一些代码示例无法编译,您必须解决缺少的功能。所以不要在你的工作场所尝试书中关于生产代码的实验(我的意思是,你无论如何都不会,对吧?)。
老实说,别管 C++,学习Java并发模型仍然是理解并发的合理起点。或者 Go:它有一些非常好的抽象,要花半天时间才能理解它的要点,它会告诉你应该如何让并发程序工作,假设没有丑陋的复杂性迫使你这样做。当然,您不会立即在您的专业 C++ 工作中使用 Java、Go 或 C++11 中的所有知识,但它可能仍然值得拥有。