У меня есть struct
, состоящий из простых старых данных, которые я разделяю между двумя динамически связанными библиотеками (или общими объектами). (скомпилировано с помощью С++ 11).
Один из элементов данных должен быть атомарным типом или, если быть более точным, мне нужно иметь возможность применять к нему префиксы ++
и --
атомарно.
У меня есть проблемы с использованием std::atomic<unsigned int>
для члена, так как я думаю, что это свяжет две библиотеки с использованием одной и той же реализации STL.
Поэтому я бы предпочел использовать std::uint32_t
в качестве члена и применить атомарные операции к этому члену в библиотеках. Только я не могу понять, как это сделать, кроме как использовать мьютекс, который ухудшит производительность до неприемлемой степени.
В общем, как я могу сделать что-то вроде
std::int32_t foo;
atomic_increment(foo);
используя функции, доступные по стандарту С++ 11?