Блокировки и мьютексы в C++

Я некоторое время изучал C++ и до сих пор не наткнулся на хорошую книгу, которая объяснила бы, что это за звери? Являются ли они неотъемлемой функцией С++? Если да, то почему они упоминаются только в такой книге, как «Язык программирования C++» Б.С. Если нет, то где вы можете получить достоверную информацию о них - предпочтительно книгу (не очень люблю веб-учебники), как их определить, как их использовать и т. д. Спасибо за любую ценную помощь.


person There is nothing we can do    schedule 26.11.2009    source источник
comment
вы ищете, как использовать концепции мьютекса в С++?   -  person Suresh    schedule 26.11.2009
comment
Блокировки и мьютексы — это общая концепция программирования; они не являются специфическими для C++ и фактически даже не являются частью текущего языка C++.   -  person Charles Salvia    schedule 26.11.2009
comment
Новая версия C++, C++11, включает блокирующие примитивы. Например. посмотрите ссылку здесь en.cppreference.com/w/cpp/thread   -  person    schedule 26.11.2011


Ответы (5)


Блокировки и мьютексы — это конструкции параллелизма, используемые для предотвращения одновременного доступа двух потоков к одним и тем же общим данным, что обеспечивает корректность.

В текущем стандарте C++ нет средств параллелизма.

Хотя вы упомянули, что предпочитаете книги онлайн-руководствам, Столбец "Эффективный параллелизм" определенно обязателен к прочтению.

Существует также предстоящая книга Энтони Уильямса под названием Параллелизм C++ в действии. Энтони Уильямс является автором Boost.Thread. библиотека.

Еще одна библиотека потоков, на которую стоит обратить внимание, — это Intel TBB.

person Gregory Pakosz    schedule 26.11.2009
comment
+1 для библиотеки Boost.Thread, классификацию концепций и представленных способов использования стоит прочитать, по крайней мере. - person Matthieu M.; 26.11.2009
comment
Средства многопоточности теперь есть и в C++11. См., например, эту ссылку. - person ; 16.10.2011

Блокировки и мьютексы не являются частью текущего стандарта C++, поскольку они имеют дело с параллелизмом, который не является частью стандарта. Они включены в несколько библиотек, и разные ОС имеют разные способы работы с ними (потоки POSIX и Windows). Если вы возьмете книгу по параллельному программированию для C++, вы, вероятно, найдете то, что ищете. Вы можете найти их реализации как в библиотеках boost, так и в библиотеках ACE.

Потоки являются частью стандарта C++0x. Я пока не знаю ни одной книги по этому вопросу, но в Википедии есть описание новых функций многопоточности здесь.

person tloach    schedule 26.11.2009

В настоящее время C++ не поддерживает потоки, поэтому потоки мьютексов и т. д. не являются частью языка.
Обычно вам нужно использовать системные библиотеки для потоков и мьютексов, например библиотеку pthread в Linux.
Возможно. pthread-подобные библиотеки слишком похожи на c, но есть библиотеки C++, которые оборачивают их в C++-стиль, например, ptypes или boost.

person Arkaitz Jimenez    schedule 26.11.2009

Это базовые конструкции, используемые для обеспечения корректности в параллельных программах. Они включены в Boost и новый стандарт C++.

Я могу рекомендовать эту книгу, хотя она не посвящена C++: https://rads.stackoverflow.com/amzn/click/com/0123705916.

person Bastien Léonard    schedule 26.11.2009

Блокировки и мьютексы (подумайте: взаимное исключение) позволяют взаимодействующим потокам синхронизировать доступ к общим ресурсам. Чтобы получить краткий обзор концепции, прочитайте статью Википедии о взаимном исключении.

Эти концепции не являются частью языка C++. книга O'Reilly pthreads будет хорошим справочником для вас, если вы работаете на платформе POSIX. . Для Windows вы можете использовать Системное программирование Windows из Аддисон-Уэсли.

person Greg Bacon    schedule 26.11.2009