0

問題:スレッドでミューテックスロックを使用すると、割り当てが大幅に遅くなりますが、適切な割り当てが得られるため、適切なデータ構造になります。

ミューテックス ロックを使用しない場合、割り当てジョブはスレッドではるかに高速に実行されますが、データ構造が破損します。

これは、完全に機能するコード (ミューテックス ロックの不適切な使用) を含む以前の投稿と密接に関連しています。

x64 Linuxで、複数のスレッドでの割り当て後にc ++リンクリストの欠落ノード。なぜ?

3 つの異なるアロケータを試しましたが、ミューテックス ロックを使用すると速度が低下するように見え、使用しないとデータ構造が破損します。助言がありますか ?

4

1 に答える 1

2

複数のスレッドが共通のデータ構造 (たとえば、ある種のメモリ プール) を使用し、少なくとも 1 つのスレッドがデータ構造を変更している場合、何らかの形式の同期が必要です。同期がアトミック、ミューテックス、またはその他のプリミティブに基づいているかどうかは別の問題です。

標準ライブラリ (operator new()およびmalloc()それぞれのファミリの他のメンバー) によって提供されるメモリ割り当てメカニズムはスレッドセーフであり、追加の同期を行う必要はありません。自分で作成した複数のスレッド間で共有されるリソースからメモリ割り当てを使用する必要がある場合は、結果として遅くなっても同期する必要があります。

于 2012-10-16T17:20:30.330 に答える