Вы также можете использовать сборку с ручным кодом или компилятор intrinsics , которые будут выполнять атомные проверки вашего мьютекса, они также могут атомарно ++ и - ваш счетчик.
volatile - бесполезный в наши дни, по большей части, вы должны смотреть на барьеры памяти, которые являются другим средством низкоуровневого ЦП, чтобы помочь с многоядерными конфликтами.
Тем не менее, лучший совет, который я могу дать, заключается в том, чтобы вы разбирались в различных управляемых и собственных многоядерных библиотеках поддержки. Я думаю, что некоторые из более старых, например OpenMP или MPI (основанные на сообщениях), все еще работают, и люди будут рассказывать о том, насколько они круты ... однако для большинства разработчиков что-то вроде TBB или * 1011 от intel * Microsoft новый API, я также только что откопал этот проект кода статья , он, очевидно, использует cmpxchg8b, который является низкоуровневым аппаратным маршрутом, о котором я упоминал изначально ...
Удачи.