c - 是否存在保留插入顺序的无锁哈希表?

标签 c data-structures hashtable lock-free

我正在尝试优化我在其中使用基于锁的哈希表的库。 一种方法是用无锁结构替换基于锁的结构。

我发现了一些算法,我决定使用这篇论文在 C 中实现:Split-ordered lists: lock-free extensible hash tables

问题是这种结构不保留元素的插入顺序,我需要这个特性有两个原因:

1) 获取当前元素的下一个元素(按照插入顺序而不是hashkey顺序),

2) 当达到 ht 中的最大元素数时替换旧条目(用新条目)。这是因为我将哈希表用作缓冲区,并且我想固定其大小。

所以我问你,所有无锁哈希表的实现都会遇到这个“缺乏插入顺序”的问题吗?或者有什么解决办法?

最佳答案

如果内存不是问题,一个简单的实现方法是使用原子引用。修改将复制内部数据结构,进行更改,然后更新引用。

在一个简单的实现中,这意味着最后一次写入获胜,所有其他写入都被“忽略”。对于更复杂的情况,您可以在引用中添加一个锁定结构,以允许对写入操作进行排队。

因此,您付出了另一个间接级别的代价,但却获得了一种交换数据结构和算法的非常简单的方法。

由于这种方法适用于任何算法,您可以选择一种保留顺序的算法。

关于c - 是否存在保留插入顺序的无锁哈希表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21093065/

相关文章:

powershell - 检查相同的哈希表值

c - 从结构到数组的不完整复制

java - 我应该如何以节省内存的方式将字符串键映射到 Java 中的值?

algorithm - rehash 时如何提高性能?

c++ - 使用双向链表实现稀疏矩阵中的多项式

java - 在java中搜索对象列表并增加该对象的变量的最有效方法

java - 将哈希表转换为字节数组

c - 在 C 中创建大小在运行时决定的数组时出错

c++ - 默认情况下整数文字的类型不是 int?

c++ - 有类似portablepython的C/C++项目吗?