Приоритеты синхронизации Linux (spinlock, mutex, RCU) используют инструкции по защите памяти, чтобы заставить команды доступа к памяти получать повторное упорядочение. И это переупорядочение может выполняться либо самим процессором, либо компилятором.
Может ли кто-нибудь показать некоторые примеры кода GCC, где такое переупорядочение сделано? Меня интересует в основном x86. Причина, по которой я задаю это, - понять, как GCC решает, какие инструкции могут быть переупорядочены. Различные архитектуры x86 mirco (например: песчаный мост и мост с плющом) используют другую архитектуру кеша. Поэтому мне интересно, как GCC делает эффективное переупорядочение, которое помогает в производительности исполнения независимо от архитектуры кэша. Некоторый пример кода C и переупорядоченного кода, созданного GCC, был бы очень полезен. Спасибо!