![]() |
1
2
我不确定您是否仍然希望保留无锁特性,或者只是希望让64位密钥/值存储正常运行。(?) @kol在这里发布了一个64位杂音3: hashing a small number to a random looking 64 bit integer 显然,如果引入了第二个数组来断言密钥位置所有权,并将其用于值存储,则可以分两步读取和cas 64位值,然后释放所有权。当然,这不能让你开锁。
————————————————————————————————————————————编辑:---
编程语言中的高级主题:无锁哈希表 https://www.youtube.com/watch?v=HJ-719EGIts
快速无等待哈希表
他把他的程序流程与一个有限状态机联系起来。不考虑增长表的问题,在一个位置应用潜在的突变之前,该位置可以处于四种状态。键/值=[nil/nil],[x/nil],[x/x],[nil/x]。 在并发情况下,读取准备变异的状态并不能保证应用变异时的状态保持不变。
对于32位操作,我们有以下逻辑:
如果要使用32位原子操作存储64位数据而不进行锁定,则状态图的大小会增加,故障状态也会增加,例如:
增加表大小的过程也增加了一些需要考虑的状态。 |