【发布时间】:2019-09-02 19:21:17
【问题描述】:
在Linux Kernel Development (3rd Edition),内核同步方法、排序和障碍。有一个例子:
我对本书中的陈述感到困惑:
同样,没有内存屏障,可以设置 b 在将 pp 设置为 p 之前为 pp。
那么,作者的意思是如果没有read_barrier_depends(),b = *pp会在pp = p之前执行?这怎么可能?
【问题讨论】:
-
他们很可能在
pp was set to p之前表示b to be set to *p,而p可能会在两者之间更改其值。 -
那么,
read_barrier_depends()是做什么的? -
它告诉编译器不要重新排序之前和之后的内存读取。例如,必须先发出之前的所有读取和写入,然后才能发出屏障之后的所有读取。
-
1,
all the reads and writes before或all the reads before? 2、read_barrier_depends只影响编译器不影响处理器重排序?
标签: compiler-construction processor instruction-reordering