Почему специализации std :: atomic <integral>не предоставляют операторы умножения и деления? - PullRequest
10 голосов
/ 22 марта 2012

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

1 Ответ

12 голосов
/ 22 марта 2012

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

...