6

我正在寻找一些包含 STM 样式(软件事务内存)哈希映射的 C 库,但到目前为止我没有运气。如果它基于 glib / gobject 那就太好了,但这并不是那么重要。它也不需要对许多对象进行适当的交易——我真正需要的是单一的不可变哈希支持。

必须具备:不可变的快照读取、自动重试的无锁写入。

4

3 回答 3

4

Wikipedia 列出了各种STM 实现

于 2009-11-08T20:03:16.120 回答
3

好吧,我认为(并且有许多研究)当前的 STM 并不比无锁和基于互斥的代码快。显而易见:STM 需要在线数据冲突检查。然而,纯软件中的这种冲突检查需要非常大的时间开销。目前,只有 Sun 的ROCK 处理器通过硬件支持有限形式的 STM(Best-effort HTM with STM)。目前没有 x86 CPU 在硬件中支持 TM。简而言之,STM就是慢。

在我看来,你最好只使用并发哈希表。例如,您可以concurrent_hash_map在 Intel TBB 中找到。这是TBB 手册的链接。哦,但它是 C++,而不是 C。但是,我相信您可以(尽管可能需要大量工作)将基于 C++ 的此类哈希表转换为 C 代码。英特尔 TBB 是开源的。

另外,我认为这种高度并发(通常实现为无锁)的数据结构并不总是有用的。在某些工作负载模式中,使用这样的数据结构并不好。可以肯定的是,我建议您为两个版本的哈希表编写一个小型微基准测试:(1)无锁和(2)基于锁。另外,请记住,这种微基准测试的工作负载模式应该接近真实的。可以在这里找到一个例子。

于 2009-11-08T20:41:08.070 回答
0

TBoost.STM在其示例中实现了一个哈希映射。

于 2012-02-20T09:07:16.817 回答