Почему стандартные библиотеки не реализуют std :: atomic для структур размером до 8 байт без блокировки? - PullRequest
7 голосов
/ 29 апреля 2019

Предполагая, что архитектура может поддерживать 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, оба из которых используют таблицу блокировок.

...