请教关于内存屏障的问题(Linux内核Seq锁实现的代码)
时间:2011-02-24
来源:互联网
最近学习Linux内核,有以下疑问,请教一下,各位大牛:
static inline void write_seqlock(seqlock_t *sl)
{
spin_lock(&sl->lock);
++sl->sequence;
smp_wmb(); //这里好理解,++sl->sequence 不会被重排,即smp_wmb之后一定加操作一定执行了。
}
static inline void write_sequnlock(seqlock_t *sl)
{
smp_wmb(); //但是这里的smp_wmb有什么作用??好像没什么意义
sl->sequence++;
spin_unlock(&sl->lock);
}
static inline int write_tryseqlock(seqlock_t *sl)
{
int ret = spin_trylock(&sl->lock);
if (ret) {
++sl->sequence;
smp_wmb();
}
return ret;
}
static __always_inline unsigned read_seqbegin(const seqlock_t *sl)
{
unsigned ret;
repeat:
ret = sl->sequence;
smp_rmb();
if (unlikely(ret & 1)) {
cpu_relax();
goto repeat;
}
return ret;
}
static __always_inline int read_seqretry(const seqlock_t *sl, unsigned start)
{
smp_rmb(); //这里也是???
return (sl->sequence != start);
}
static inline void write_seqlock(seqlock_t *sl)
{
spin_lock(&sl->lock);
++sl->sequence;
smp_wmb(); //这里好理解,++sl->sequence 不会被重排,即smp_wmb之后一定加操作一定执行了。
}
static inline void write_sequnlock(seqlock_t *sl)
{
smp_wmb(); //但是这里的smp_wmb有什么作用??好像没什么意义
sl->sequence++;
spin_unlock(&sl->lock);
}
static inline int write_tryseqlock(seqlock_t *sl)
{
int ret = spin_trylock(&sl->lock);
if (ret) {
++sl->sequence;
smp_wmb();
}
return ret;
}
static __always_inline unsigned read_seqbegin(const seqlock_t *sl)
{
unsigned ret;
repeat:
ret = sl->sequence;
smp_rmb();
if (unlikely(ret & 1)) {
cpu_relax();
goto repeat;
}
return ret;
}
static __always_inline int read_seqretry(const seqlock_t *sl, unsigned start)
{
smp_rmb(); //这里也是???
return (sl->sequence != start);
}
作者: zjh2005456 发布时间: 2011-02-24
都是保护多个处理器间lock和unlock间的读写的,倒和那个++没什么关系
代码的串行由SPINLOCK保护,但读写的延迟执行却是不确定的,使用屏障后,配合LOCK让其独立完成在LOCK中
代码的串行由SPINLOCK保护,但读写的延迟执行却是不确定的,使用屏障后,配合LOCK让其独立完成在LOCK中
作者: smalloc 发布时间: 2011-02-24
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28