Linux内核函数意义待完善
atomic_cmpxchg
unsigned int next = (c->nbuckets * c->sb.bucket_size) >> 10;
unsigned int i;
int r;
atomic_sub(sectors, &c->rescale);
do {
r = atomic_read(&c->rescale);
//理论上可以分支预测优化
if (likely(r >= 0))
return;
} while (atomic_cmpxchg(&c->rescale, r, r + next) != r);
原子判断:原子变量c->rescale值为r时,c->rescale赋值为r+next,否则不做变化。
返回值: c->rescale的旧值。
代码意义: 在IO高并发环境下,c->rescale是随机变化的,可能会连续多次执行下去。在低并发下,在IO大小随机情况,也有可能是随机的。
在IO路径上是否有意义,值得考虑?