为什么leveldb中的skiplist不需要锁定GET操作?

时间:2017-10-30 08:20:35

标签: concurrency atomic leveldb memory-barriers

这些是skiplist :: insert()的伪代码:

 node = new Node();
 prev = find_place_to_insert();
 node->next = prev->next;
 memory_barrier();
 prev->next = node;

写入skiplist(prev->next = node)时没有锁定(在函数insert()和外部调用中)。那么为什么在另一个线程中读取而在另一个线程中读取是安全的呢?

还有另一个实现,std::atomic字段使用Node::next。为什么内存屏障版本不需要使用原子变量?

(这是关于读者 - 作家的比赛,而不是作家 - 作家的比赛。)

0 个答案:

没有答案