-
起因是最近在看levelDB源码,其中port里的atomic_pointer.h文件用到了内存屏障。。 于是来学习一下。。 粗略得说下我自己的理解。 代码的顺序并不和执行的顺序完全对应,出于对效率的追求,cpu和编译器会对一些顺序指令重排,以期得到最大的执行效率。 比如下面这段代码: // example 2 // void *ptr, v, _store; v = ptr; _store = v; somefunc(); v = _store; v的值是没有改变的,那么编译器可能会认为_store = v; v = _store; 是多余的,就直接把这一段给“优化”掉了。这段代码在单线程中确实是多余的,但是在多线程环境下,可能 …
Read More