- 论坛徽章:
- 5
|
对于内存屏障,一直没搞明白,虽然知道是有防止指令重排序的作用,按照《现代体系结构上的UNIX系统一书》的说法,由于SPARC体系结构含有store缓冲,并不保证store是FIFO的,这时需要内存屏障。
比如linux的顺序锁,我一直不明白,- static __always_inline unsigned read_seqbegin(const seqlock_t *sl)
- {
- unsigned ret = sl->sequence;
- smp_rmb();
- return ret;
- }
复制代码 这里为什么要使用内存屏障,我也知道他是保证++sl->sequence要先执行,如果- u64 get_jiffies_64(void)
- {
- unsigned long seq;
- u64 ret;
- do {
- seq = read_seqbegin(&xtime_lock);
- ret = jiffies_64;
- } while (read_seqretry(&xtime_lock, seq));
- return ret;
- }
复制代码 这里不使用内存屏障,会有什么问题?
我的疑惑在于判断何时需要使用内存屏障?是怎样判断的?
写的不明白和有误的地方,望见谅(我菜鸟一个)。望高手指点啊。
|
|