我正在寻找一些包含STM风格(软件事务内存)哈希映射的C库,但到目前为止我没有运气。如果它基于glib / gobject会很棒,但它并不是那么重要。它也不需要在许多对象上进行适当的事务 - 我真正需要的是单个不可变哈希支持。
必须具有:不可变快照读取,使用自动重试进行无锁写入。
答案 0 :(得分:4)
Wikipedia列出了各种STM implementations。
答案 1 :(得分:3)
嗯,我认为(并且有许多研究)当前的STM并不比无锁和基于互斥的代码快。很明显:STM需要在线数据冲突检查。但是,纯软件中的这种冲突检查需要非常大的时间开销。目前,只有Sun的ROCK processor通过硬件支持有限形式的STM(带有STM的尽力而为HTM)。目前没有x86 CPU支持硬件中的TM。简而言之,STM只是很慢。
在我看来,你最好只使用并发哈希表。例如,您可以在英特尔TBB中找到concurrent_hash_map
。这是TBB Manual的链接。哦,但它是C ++,而不是C.但是,我相信你可以(尽管可能需要大量的工作)将基于C ++的这种哈希表转换为C代码。英特尔TBB是开源的。
此外,我认为这种高度并发(通常实现为无锁)数据结构并不总是有用。在某些工作负载模式中,使用此类数据结构并不好。可以肯定的是,我建议你为两个版本的哈希表编写一个小的微基准:(1)无锁和(2)基于锁。此外,请记住,这种微基准的工作负载模式应该接近真实的基准。可以在here中找到一个示例。
答案 2 :(得分:0)
TBoost.STM在其示例中实现了哈希映射。