2011-06-11 17 views
1

リンクリストの操作がスレッド間で共有されるアプリケーションを作成しています。リンクリストの操作は通常通りです:検索、挿入、削除、ノードの内容の変更 。アン実装http://www.cs.cf.ac.uk/Dave/C/node31.html#SECTION003100000000000000000'スレッドセーフな'リンクリストの実装

リンクリストの操作「スレッドセーフ」の手順全体を保つためにしかし、私は次のようにそれを行うカーン場合思っていた:

lock(mutex) 
    link list operation 
unlock(mutex) 

すなわち、私は、各リンクリストでミューテックスを関連付け、上記のように操作を開始するたびに使用してください

ビューに感謝します

答えて

1

に依存します。スレッドが主にリストを検索せずにリストを検索する場合は、リーダー/ライターロックを実装する価値があります。それらのどれもが変更されない限り、他のスレッドが情報を読み取ることを防ぐ理由はありません。しかし、最も一般的な操作でリストやその中の情報を変更する必要がある場合は、あまり得策がないかもしれないので、単純なロック/操作/ロック解除の仕組みも同様に機能するはずです。

+0

これは私にとってより有用だったので選択してください...しかし、他の答えはすごくうまくいくはずです –

+0

グローバルロックを持つ方がよいか、構造自体の中にロックを定義する方が良いですか? – Bionix1441

1

リンクされたリストに一度に1つのスレッドしか触れることができないため、リスト内でボトルネックになる可能性があります。

リンクされたリストのインターフェイス(スレッドによって呼び出されるメソッド)と、リストを安全に保つ方法を考えてください。できるだけ多くのスレッドで同時に使用できます。

たとえば、リストをキューとして使用している場合、別のスレッドがアイテムをデキューしている間に、1つのスレッドがリストの末尾に項目をエンキューすることがあります。

スレッドセーフなユーティリティの作成には多くの課題がありますが、最初にソフトウェアを並列化することで得ようとしているパフォーマンスを犠牲にしないように、できるだけ外科的にしてください!楽しむ!