Почему специализации std::atomic‹integral› не предоставляют операторы присваивания умножения и деления?

Полная специализация std::atomic для целочисленных типов предоставляет арифметические составные операторы присваивания, такие как +=, -=, но не *= или /=. В стандарте это указано, но, насколько я вижу, причина не указана. Может ли кто-нибудь, знакомый с рассуждениями о разделе библиотеки атомарных операций, пролить свет на это?


person juanchopanza    schedule 22.03.2012    source источник


Ответы (1)


Я думаю, что это связано с оборудованием. На многих платформах есть атомарные программы для обработки +=, но я не знаю ни одной, которая предлагала бы *=. Реализовать это с помощью блокировки было бы просто, но интерфейс std::atomic будет смешивать на одном уровне операции, которые как-то дешевы, с очень дорогими операциями.

person David Rodríguez - dribeas    schedule 22.03.2012
comment
Это было мое подозрение. Я думаю, именно поэтому есть операции побитового И, ИЛИ и XOR, но нет битовых сдвигов. - person juanchopanza; 22.03.2012