Является ли Энтони Уильямом "С++ Concurrency в действии" правильной книгой, если не использовать С++ 11?

Я хочу узнать больше от concurrency, и я нашел эту книгу, в которой есть много хороших отзывов. Но, взглянув на предисловие, я боюсь, что он очень сфокусирован на функциях STD, включенных только в С++ 11.

Так как С++ 11 еще не очень используется, а вовсе не на моем рабочем месте, мне нужно знать, будет ли чтение этой книги пустой тратой времени, когда я буду читать другую.

Я сосредотачиваюсь на разработке Windows, но мне понравилось использование стандартных библиотек, которые будут использоваться в UNIX и Windows. Любые рекомендации или акты об этой книге?

Ответы

Ответ 1

Нет, книга сильно использует синтаксис С++ 11.

Также обсуждаются в библиотеке только функции библиотеки С++ 11, например, модель памяти С++ 11 - это совершенно новая вещь в С++ 11 (С++ 98 не распознал существование MT).

Тем не менее IMHO вы должны получить супер легко установить g++ 4.9 + boost из: nuwen.net или просто получить сообщество VS 2013.

Потому что С++ 11 является стандартом, и я предполагаю, что скоро вы начнете использовать его на своем рабочем месте (если не указать Андрея Александреску: "Назовите своего охотника за головами!" ). Btw std::thread и boost::thread весьма схожи, но с заметными отличиями.

Ответ 2

Вы правы, он сильно фокусируется на С++ 11. Это "практическая многопоточность", как предполагает субтитр.

Единственный способ, который может вас заинтересовать, если вы не используете С++ 11, - это если вы планируете использовать потоки boost, которые являются основой потоков С++ 11. Но вы должны знать, что они не совсем то же самое, как С++ 11 внесли некоторые изменения. (например, в С++ 11 вам нужно решить, дождаться завершения потока или оставить его самостоятельным. В boost он запускается самостоятельно по умолчанию. Если вы не выбрали в С++ 11, ваша программа завершится).

Затем, для вашего общего знания как разработчика С++, интересующегося его полем, это рекомендуется прочитать. С++ 11 книг пока не легион.

Ответ 3

Следующее поколение Visual С++, которое выйдет в течение целых двух недель, включает в себя библиотеки std::thread, а g++ - уже, если я не ошибаюсь. Я бы не посчитал это против него. И здесь вещь: С++ 11 действительно очень важна. Если ваше рабочее место не планирует мигрировать, я найду другое рабочее место.

Ответ 4

С

  • Вы ищете книгу для чтения на concurrency
  • вы хотите использовать библиотеку, которая будет работать как в окнах, так и в unix
  • вы хотите использовать С++, но не С++ 11

вам, вероятно, понадобится использовать Boost.Thread.

Есть несколько причин, по которым вы читали бы эту книгу:

  • Я не знаю книгу о потоках Boost
  • Автор этой книги был основным разработчиком и хранителем Boost.Thread в течение многих лет.
  • С++ 11 потоков очень похожи на потоки Boost (автор пишет: "Большинство примеров из книги можно изменить, чтобы работать с библиотекой Boost Thread разумным замена std:: boost:: и использование соответствующих директив #include. ")

Ответ 5

Я думаю, что это очень интересная книга, даже если вы не знаете многопоточности. Как создание двух мьютексов в одной структуре, проблемы при переключении с двух ядер на два процессора. Существует также много шаблонов проектирования. Из этой книги вы узнаете на примере, что такое проблема с ABA и т.д. Кроме того, boost thread (который не нужен С++ 11x) очень симулятивен для С++ 11 потоков. Вы будете придерживаться smart_ptrs, может быть, раковина, RAII и т.д. Это замечательная книга.

Помните, что даже теперь не все функции реализованы в примере g++. http://gcc.gnu.org/projects/cxx0x.html

Пусть честно, вы обязательно начнете изучать новый С++, вопрос времени, когда вам придется прикоснуться к нему.

Ответ 6

Я не читал книгу, но если вы не знаете о concurrency, то первое, что нужно сделать, это прочитать, использовать и понять одну многопоточную систему.

Затем сделайте то же самое для другой системы и обратите внимание на отличия от того, что вы уже знаете. Когда вы обнаружите различия, начните читать, чтобы узнать, как много разных систем обрабатывают этот аспект concurrency.

Если вы в настоящее время работаете над многопоточной программой, то первой системой, которую вы изучаете, должна быть система, над которой вы в первую очередь работаете, потому что, пока вы не поймете эту модель concurrency, вы, вероятно, и/или программирование путем копирования и вставки существующего кода. Таким образом, вероятно, это Windows, pthreads, Boost, TBB или что-то еще, что уже существует. С++ 11 может быть сильным кандидатом для второй системы.

В противном случае, я не думаю, что это слишком сильно отличается от того, который вы изучаете первым. OK С++ 11 имеет крошечный недостаток, что он еще не существует, кроме как в формате PDF - вам нужно будет установить некоторую версию компилятора, которая все еще находится в быстрой разработке, и, возможно, использовать потоки Boost вместо std::thread на время и, возможно, некоторые из примеров кода в книге не будут компилироваться, и вам придется работать с отсутствующими функциями. Поэтому не пытайтесь экспериментировать с книгой в своем рабочем месте по производственному коду (я имею в виду, вы все равно не могли бы?).

Честно говоря, неважно, С++, изучение модели Java concurrency все же может быть разумным началом на пути к пониманию concurrency. Или Go: у этого есть некоторые очень красивые абстракции, для того, чтобы понять суть этого, потребуется всего полдня, и он покажет вам, как вам нужно, чтобы параллельные программы работали, предполагая, что никакие уродливые осложнения не заставят вас сделать иначе. Конечно, вы не собираетесь использовать все эти знания из Java, Go или С++ 11 сразу же в своей профессиональной работе на С++, но это все равно может быть полезно.