такое неблокирующее параллельное программирование для реального? - PullRequest
2 голосов
/ 09 ноября 2010

Я читал случайные ссылки на неблокирующие алгоритмы и использовал их в параллельном программировании. Существуют ли какие-либо полезные библиотеки, использующие неблокирующие алгоритмы с C / C ++ и какие типы параллельных структур данных больше всего выигрывают от использования неблокирующего алгоритма? Спасибо.

Ответы [ 2 ]

4 голосов
/ 09 ноября 2010

Нет такой вещи как бесплатный замок.Все многопоточные алгоритмы используют синхронизацию.Вы можете получить алгоритмы без блокировки, которые не используют явные блокировки, но полагаются на атомарные операции и другие подобные «не-блокировки», но реальность такова, что вы должны быть очень хорошим программистом - и знать свою целевую платформу и детали реализациицелевой процессор - для того, чтобы написать такой алгоритм.Единственные алгоритмы без блокировки, которые я знаю, которые действительно работают, - это 360, написанные инженерами Microsoft, которые должны были получить проектные документы о том, как ЦП в 360 реализовал блокировку, прежде чем они смогли добиться успеха.

Алгоритм без блокировки C ++ будет применен к слишком большому количеству процессоров, чтобы заставить такую ​​вещь работать - вы не могли бы просто написать это поверх boost :: thread.

1 голос
/ 09 ноября 2010

boost::thread использует семантику сравнения и замены для shared_mutex в Windows - только при возникновении конфликта выполняется блокирующий вызов (с использованием семафоров).

Windows сама поддерживает использование счетчика вращений в критических разделах через InitializeCriticalSectionAndSpinCount , чтобы попытаться оптимизировать бит для высококонкурентных блокировок в системах MP.

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

Это также дает мне еще одну возможность подключить книгу, которую я так долго ждал, поскольку в ней есть глава на эту тему: Параллельность C ++ в действии .

...