Полная специализация std::atomic для целочисленных типов предоставляет арифметические составные операторы присваивания, такие как +=
, -=
, но не *=
или /=
. В стандарте это указано, но, насколько я вижу, причина не указана. Может ли кто-нибудь, знакомый с рассуждениями о разделе библиотеки атомарных операций, пролить свет на это?
Почему специализации std::atomic‹integral› не предоставляют операторы присваивания умножения и деления?
Ответы (1)
Я думаю, что это связано с оборудованием. На многих платформах есть атомарные программы для обработки +=
, но я не знаю ни одной, которая предлагала бы *=
. Реализовать это с помощью блокировки было бы просто, но интерфейс std::atomic
будет смешивать на одном уровне операции, которые как-то дешевы, с очень дорогими операциями.
person
David Rodríguez - dribeas
schedule
22.03.2012
Это было мое подозрение. Я думаю, именно поэтому есть операции побитового И, ИЛИ и XOR, но нет битовых сдвигов.
- person juanchopanza; 22.03.2012