Более низкий уровень std :: atomic & lt; unsigned int & gt;

у меня есть struct он состоит из простых старых данных, которые я разделяю между двумя динамически связанными библиотеками (или общими объектами). (Скомпилировано с C ++ 11).

Один из элементов данных должен быть атомарного типа или, если быть более точным, мне нужно иметь возможность применять префикс ++ а также -- к этому атомарно.

У меня есть проблемы с использованием std::atomic<unsigned int> для члена, так как я думаю, что две библиотеки будут использовать одну и ту же реализацию STL.

Так что я бы лучше использовал std::uint32_t в качестве члена и применять атомарные операции к этому члену в библиотеках. Только я не могу понять, как это сделать, кроме использования мьютекса, который может привести к снижению производительности до недопустимого уровня.

В итоге, как я могу сделать что-то вроде

std::int32_t foo;
atomic_increment(foo);

используя функции, доступные по стандарту C ++ 11?

0

Решение

Ты не можешь Стандартный C ++ не учитывает идею разных реализаций библиотеки в разных разделяемых библиотеках (поскольку он не имеет понятия о последних) и поэтому не считает вашу ситуацию существующей. Поэтому нет возможности поддержать его.

На практике, однако, просто используйте std::atomic — любой достойный компилятор / библиотека на платформе, которая фактически поддерживает атомарность, не должна оставлять никаких следов в машинном коде.

1

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


По вопросам рекламы [email protected]