Когда НЕ использовать атомарные операции?

Я могу подумать о причинах, когда это не имеет значения, и о ситуации, когда вы НЕ МОЖЕТЕ их использовать, когда вы хотите протестировать дизайн на поведение с неатомарными операциями.

Какие еще причины? В частности, я работаю над проектом, в котором есть некоторые редкие условия гонки, потому что в тесте не используются атомные приращения. Мне интересно, почему бы мне не просто использовать атомарные приращения, когда функция для него уже существует?

Спасибо!

8

Решение

Потому что атомы медленнее. Они замедляют вызывающий поток и могут также замедлять другие потоки, потенциально даже те, которые не обращаются к одной и той же атомной структуре. Они также могут препятствовать выполнению компилятором определенных оптимизаций переупорядочения, которые он мог бы выполнить в противном случае.

6

Другие решения

Атомные операции потенциально и, вероятно, более дороги, чем их неатомный эквивалент. В случаях, когда синхронизация между потоками не требуется, например, обновление неразделенного локального, atomiticy добавляет ненужные накладные расходы и их следует избегать.

1