Предполагая, что архитектура может поддерживать 8-байтовые скаляры без блокировки для std :: atomic.Почему стандартные библиотеки не предоставляют аналогичные специализации для структур размером менее 8 байт?
Простая реализация такой специализации std :: atomic может просто сериализовать / десериализовать (с std::memcpy
) структуру в эквивалентнуюstd::uintx_t
где x
- ширина структуры в битах (округленная до ближайшей степени 2, которая больше или равна ширине структуры).Это было бы хорошо определено, потому что std :: atomic требует, чтобы эти структуры были легко копируемыми.
Например.https://godbolt.org/z/sxSeId, здесь Something
составляет всего 3 байта, но реализация вызывает __atomic_load
и __atomic_exchange
, оба из которых используют таблицу блокировок.