Quantcast
Channel: Linux.org.ru: Форум
Viewing all articles
Browse latest Browse all 108344

C++ std::atomicв шареной памяти.

$
0
0

Есть кусок шареной памяти, часть которого хочется рассматривать как массив 64-битных атомарных переменных.

Обычно я юзал GCC atomic buildins, например __sync_fetch_and_add для сложения с моей атомарной переменной. Кстати, должен ли я юзать при этом только выровненные адреса? Или MOV на платформе x86 атомарен на любых кривых адресах? По-моему не должен, ну ладно.

Так вот, такой код перестал казаться кошерным, захотелось заюзать std::atomic<uint64_t> в шареной памяти. Есть способы трактовать уже выделенный кусок памяти как последовательность нескольких таких объектов? Или надо вызвать несколько раз placelent new, чтобы отработал конструктор? На моей платформе std::atomic в конструкторе делает ничего (как я понял), стейта никакого не хранит и оверхеда по памяти ноль. Казалось бы, я могу просто скастить указатель и счастье, но на других платформах такое может рвануть не по-детски.

Как я понял, нормального кросс-платформенного решения на тему «трактовать уже выделенную память как массив std::atomic - ов для простого интегрального типа» нет. Народ говорит о каких-то полиморфных аллокаторах, которые на стадии экспериментов и вне стандарта пока.

Выскажитесь по сабжу.

 


Viewing all articles
Browse latest Browse all 108344

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>