是否有可能通过内存屏障实现易失性变量的相同“保证”(始终读/写内存而不是寄存器)?只需在一个线程中写入变量,然后在另一个线程中读取其值。下面的内容是等价的吗?
#define rmb() __sync_synchronize()
#define wmb() __sync_synchronize()
static volatile int a;
static int b;
//invoked by thread 1
static void writer(void)
{
...
a = 1;
...
b = 1;
wmb();
}
//invoked by thread 2
static void reader(void)
{
...
while (a != 1)
;
// do something
...
while (b != 1)
rmb();
// do something
}
Run Code Online (Sandbox Code Playgroud)
编辑:好的,我知道 volatile 不能保证原子性、可见性或顺序。内存屏障除了排序之外还提供其他功能吗?还有能见度?除了 _Atomic C11 或 gcc/clang 原子内置函数之外,还有其他东西可以保证可见性吗?