6

I'm looking for some C library that includes STM-style (Software Transactional Memory) hash maps, but I had no luck so far. It would be great if it was based on glib / gobject, but it's not that crucial. It also doesn't need proper transactions over many objects - single immutable hash support is all I really need.

Must haves: immutable snapshot read, lock-free write with auto-retry.

4

3 に答える 3

4

ウィキペディアには、さまざまなSTM 実装のリストがあります。

于 2009-11-08T20:03:16.120 に答える
3

ええと、現在の STM は、ロックフリーおよびミューテックス ベースのコードよりも高速ではないと思います (そして多くの研究があります)。明らかです。STM にはオンラインのデータ競合チェックが必要です。ただし、純粋なソフトウェアでのこのような競合チェックには、非常に膨大な時間のオーバーヘッドが必要です。現在、Sun のROCK プロセッサのみが、ハードウェアによる STM (Best-effort HTM with STM) の限られた形式をサポートしています。現在、ハードウェアで TM をサポートしている x86 CPU はありません。要するに、STM はただ遅いだけです。

私の意見では、同時ハッシュ テーブルを使用した方がよいでしょう。たとえばconcurrent_hash_map、Intel TBB で見つけることができます。ここにTBBマニュアルのリンクがあります。ああ、でもそれは C++ であり、C ではありません。しかし、C++ ベースのそのようなハッシュ テーブルを C コードに変換できると思います (かなりの作業が必要になるかもしれませんが)。Intel TBB はオープンソースです。

また、このような高度に並行性のある (通常はロックフリーとして実装されている) データ構造は、常に有用であるとは限りません。一部のワークロード パターンでは、このようなデータ構造を使用することは適切ではありません。確かに、(1) ロックフリーと (2) ロックベースの 2 つのバージョンのハッシュ テーブルの小さなマイクロ ベンチマークを作成することをお勧めします。また、このようなマイクロ ベンチマークのワークロード パターンは、実際のワークロード パターンに近い必要があることに注意してください。例はこちらにあります。

于 2009-11-08T20:41:08.070 に答える
0

TBoost.STMは、その例にハッシュ マップを実装しています。

于 2012-02-20T09:07:16.817 に答える