Может ли функция smp_wmb() предотвратить переупорядочивание инструкций компилятором и процессором?
Коды есть:
static inline void __list_add_rcu(struct list_head * new,
struct list_head * prev, struct list_head * next)
{
new->next = next;
new->prev = prev;
smp_wmb();
next->prev = new;
prev->next = new;
}
#define smp_wmb() wmb()
#ifdef CONFIG_UNORDERED_IO
#define wmb() asm volatile("sfence" ::: "memory")
#else
#define wmb() asm volatile("" ::: "memory")
Я знаю, что функция smp_wmb() может предотвратить переупорядочивание инструкций компилятором из вики.
Но какие способы RCU предотвращают переупорядочение процессором?