Весьма вероятно, что блокировка мьютекса фактически реализована как атомный приращение сама по себе, и если вам не повезло получить конкуренцию на блокировке, также с использованием системного вызова [предполагая, конечно, что это не является системным вызовом в любом случае!].
Атомное решение на x86 будет простой операцией «блокировки». На других процессорах это может быть более сложным, но даже при том, что атом является минимальным, необходимым для мьютекса, поэтому у вас есть, по крайней мере, такой объем работы.
Затем вы добавляете разблокировку мьютекса, которая может быть не такой сложной, но она не будет полностью бесплатной.
Итак, да, идем на атомный.
Но, как и все, что связано с производительностью, измерьте «до» и «после», чтобы увидеть, что он действительно улучшает производительность.
Обратите внимание, что я видел, как кто-то объяснил, что первоначальная реализация стандартной библиотеки gnu C++ была фактически выполнена с использованием какого-то мьютекса вокруг операции, но я считаю, что если у вас есть достаточно последняя версия g ++, это должно быть хорошо (по крайней мере для процессоров типа x86). Microsoft долгое время поддерживала правильные атомные операции как встроенные, поэтому должно быть хорошо. Другие архитектуры процессоров могут отличаться.
'uint32' должно быть' uint32_t'. И я думаю, 'atomc32' является' std :: atomic '? http://en.cppreference.com/w/cpp/atomic/atomic –
kay
@OP Не могли бы вы пояснить, что вы подразумеваете под 'atomc32'? Если это из файла заголовка конкретной платформы, можете ли вы добавить информацию об этом? – jogojapan
@jogojapan и код ядра Linux и FreeBSD использует атомный_32_t, но я совершенно уверен, что это не вопрос. ;) Но вы правы, я удалю тег C++ 11. – kay