Есть ли способ выполнить атомарные операции над неатомарным объектом? [дубликат] ⇐ C++
Есть ли способ выполнить атомарные операции над неатомарным объектом? [дубликат]
У меня есть struct, содержащая целое число (скажем, int m_ref), обозначающее внутренний счетчик ссылок.
Чтобы обеспечить совместимость с C, я не могу изменить тип на std::atomic: struct может содержать только старые данные. Однако я хочу изменить свой код, чтобы использовать атомарные функции C++11; а именно мне нужно выполнить:
++m_ref; и
--m_ref; как атомарные операции. В настоящее время я использую для этого ассемблер (блокировки шины Intel), но этот код вряд ли переносим, и я хочу удалить его сейчас, когда C++ предлагает стандартную конструкцию.
Как-то мне нужно проникнуть «под капот» и сделать то, что делает atomic, но без накладных расходов на создание атомарного типа: я боюсь, что присоединение m_ref к atomic< T> приведет к снижению производительности.
Я подозреваю, что это вполне стандартно, и мне здесь не хватает чего-то простого.
У меня есть struct, содержащая целое число (скажем, int m_ref), обозначающее внутренний счетчик ссылок.
Чтобы обеспечить совместимость с C, я не могу изменить тип на std::atomic: struct может содержать только старые данные. Однако я хочу изменить свой код, чтобы использовать атомарные функции C++11; а именно мне нужно выполнить:
++m_ref; и
--m_ref; как атомарные операции. В настоящее время я использую для этого ассемблер (блокировки шины Intel), но этот код вряд ли переносим, и я хочу удалить его сейчас, когда C++ предлагает стандартную конструкцию.
Как-то мне нужно проникнуть «под капот» и сделать то, что делает atomic, но без накладных расходов на создание атомарного типа: я боюсь, что присоединение m_ref к atomic< T> приведет к снижению производительности.
Я подозреваю, что это вполне стандартно, и мне здесь не хватает чего-то простого.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение