小编Pei*_*ian的帖子

为什么在Redis源代码中我没有看到内存障碍?

在Linux内核源代码中,有许多内存屏障(smp_mb()等).

但在redis的来源中,我没有看到它.在redis的Makefile中,gcc optimize选项是-O2,所以应该重新排序这些指令.为什么不使用mb()来确保正确的行为?

添加:

例如:在Linux内核的kfifo中:

unsigned int __kfifo_put(struct kfifo *fifo,unsigned char *buffer, unsigned int len)   
{   
  unsigned int l;   
  len = min(len, fifo->size - fifo->in + fifo->out);
  smp_mb();
  l = min(len, fifo->size - (fifo->in & (fifo->size - 1)));   
  memcpy(fifo->buffer + (fifo->in & (fifo->size - 1)), buffer, l);
  ...
  smp_wmb();
  fifo->in += len;
  ...
}
Run Code Online (Sandbox Code Playgroud)

在Redis源代码中,我研究整个项目,找不到内存障碍:例如:

zskiplistNode *zslInsert(zskiplist *zsl, double score, robj *obj) {
  zskiplistNode *update[ZSKIPLIST_MAXLEVEL], *x;
  unsigned int rank[ZSKIPLIST_MAXLEVEL];
  int i, level;
  ...
  level = zslRandomLevel();
  if (level > zsl->level) …
Run Code Online (Sandbox Code Playgroud)

c memory gcc kernel redis

2
推荐指数
2
解决办法
310
查看次数

标签 统计

c ×1

gcc ×1

kernel ×1

memory ×1

redis ×1