Основная причина использования атомистики над мьютексами - это то, что мьютексы дороги. но с моделью памяти по умолчанию для atomics, являющейся memory_order_seq_cst, разве это не так дорого?
Вопрос: может ли одновременная программа с использованием блокировок быть такой же быстрой, как совместная программа без блокировки?
если это так, это может не стоить усилий, если я не хочу использовать memory_order_acq_rel для атомистики.
изменить: у меня может быть что-то не хватает... но на основе блокировки может быть быстрее, чем блокировка.. потому что каждая блокировка также должна быть полным барьером памяти. но с блокировкой, его можно использовать методы менее ограничительные, чем барьеры памяти.
так что вернемся к моему вопросу... заблокирован ли какой-либо быстрее, чем блокировка, в новом стандарте С++ 11 с по умолчанию memory_model?
является "блокировкой" = блокировкой при измерении в производительности "true? позволяет предположить 2 аппаратных потока.
edit2: мой вопрос заключается не в гарантиях прогресса, а, возможно, в использовании "блокировки" вне контекста.
В основном, когда у вас есть 2 потока с разделяемой памятью, и единственная гарантия, которая вам нужна, заключается в том, что если один поток пишет, то другой поток не может читать или писать, мое предположение заключается в том, что простая операция compare_and_swap для атома будет намного быстрее, чем блокировка мьютекс.
Потому что, если один поток никогда не затрагивает разделяемую память, вы снова и снова будете блокировать и разблокировать без причины. с атомными операциями вы используете только один процессорный цикл каждый раз.
Что касается комментариев, то прямая блокировка против блокировки мьютекса очень различна, когда есть очень мало споров.