Как получить _logical_ барьеры приобретения / выпуска с g ++ - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть код, который использует __sync_val_compare_and_swap с моей кросс-платформенной реализацией shared_mutex.Windows-версия (# ifdef'd) использует _InterlockedCompareExchange-intrinsic, которая имеет полное физическое (для упорядочения загрузок и хранения процессором) и логическое (для компилятора) поведение получения и выпуска.Я не нашел никакой документации, что __sync_val_compare_and_swap-intrinsic также имеет некоторые логические эффекты на порядок загрузки и сохранения в компиляторе.Так есть ли какая-либо «внутренняя» сила, заставляющая компилятор иметь логический барьер для получения или освобождения?Я знаю, что есть asm volatile("" ::: "memory"); с gcc, но это также имеет поведение при получении и выпуске.

...