[hardware.interference] (original) (raw)
17 Language support library [support]
17.6 Dynamic memory management [support.dynamic]
17.6.6 Hardware interference size [hardware.interference]
inline constexpr size_t hardware_destructive_interference_size = _implementation-defined_;
This number is the minimum recommended offset between two concurrently-accessed objects to avoid additional performance degradation due to contention introduced by the implementation.
It shall be at least alignof(max_align_t).
[Example 1: 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_;
This number is the maximum recommended size of contiguous memory occupied by two objects accessed with temporal locality by concurrent threads.
It shall be at least alignof(max_align_t).
[Example 2: struct together { atomic<int> dog;int puppy;};struct kennel { alignas(sizeof(together)) together pack;};static_assert(sizeof(together) <= hardware_constructive_interference_size); — _end example_]