Есть ли способ выполнить атомарные операции над неатомарным объектом? [дубликат]C++

Программы на C++. Форум разработчиков
Ответить
Гость
 Есть ли способ выполнить атомарные операции над неатомарным объектом? [дубликат]

Сообщение Гость »


У меня есть struct, содержащая целое число (скажем, int m_ref), обозначающее внутренний счетчик ссылок.

Чтобы обеспечить совместимость с C, я не могу изменить тип на std::atomic: struct может содержать только старые данные. Однако я хочу изменить свой код, чтобы использовать атомарные функции C++11; а именно мне нужно выполнить:

++m_ref; и

--m_ref; как атомарные операции. В настоящее время я использую для этого ассемблер (блокировки шины Intel), но этот код вряд ли переносим, ​​и я хочу удалить его сейчас, когда C++ предлагает стандартную конструкцию.

Как-то мне нужно проникнуть «под капот» и сделать то, что делает atomic, но без накладных расходов на создание атомарного типа: я боюсь, что присоединение m_ref к atomic< T> приведет к снижению производительности.

Я подозреваю, что это вполне стандартно, и мне здесь не хватает чего-то простого.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»