inline constexpr size_t hardware_destructive_interference_size = implementation-defined;
Это число является минимальным рекомендуемым смещением между двумя объектами, к которым осуществляется одновременный доступ, чтобы избежать дополнительного снижения производительности из-за конкуренции, вызванной реализацией. Должно быть как минимум alignof(max_align_t).
struct keep_apart { alignas(hardware_destructive_interference_size) atomic<int> cat; alignas(hardware_destructive_interference_size) atomic<int> dog; };
— end example ]
inline constexpr size_t hardware_constructive_interference_size = implementation-defined;
Это число представляет собой максимальный рекомендуемый размер непрерывной памяти, занятой двумя объектами, доступ к которым осуществляется с временной локальностью для одновременных потоков. Должно быть как минимум alignof(max_align_t).
struct together { atomic<int> dog; int puppy; }; struct kennel { // Other data members... alignas(sizeof(together)) together pack; // Other data members... }; static_assert(sizeof(together) <= hardware_constructive_interference_size);
— end example ]