0

リストにペア(「キー/値」)を挿入するスレッドと、同じリストからペアを削除するスレッドが2つあります。これで、これらのスレッドが同じ「キーと値」のペアを決して変更しないことを保証できます。

そのスレッドは、リストをミューテックスで保護する必要がありますか?

ありがとう。

4

3 に答える 3

6

一般に、std コンテナーに対するあらゆる種類の変更は絶対に保護する必要があります。

読み取りには読み取りロックを使用し、書き込みには書き込みロックを使用して、pthread_rwlock の使用を検討できます。rwlocks の良いところは、複数のリーダーを同時に持つことができるため、ロックの競合が減少することです。または、少なくとも pthread_mutex。(もちろん、Linuxを想定しています)

于 2012-09-12T14:29:00.737 に答える
1

わかりました、これはリンクされたリストですよね? だから、A->C->D あなたが削除を開始すると想像してくださいCA「わかりました、のptrをリダイレクトする必要がありnextます。しかし、その前に、 の挿入を開始しますB。これは中断されることなく完了し、最終的に になりますA->B->C->D。その後、削除が続行され、Aの代わりに変更Bされます。最終的にはA->Dandになりnothing->B->who knows?ます。だからロック。

于 2012-09-12T14:33:41.657 に答える
0

ミューテックスが必要なように聞こえます...挿入および消去機能に伴うリスト管理があり、その衝突は望ましくありません。リスト管理の正確な実装の詳細を知っていれば、ミューテックスを必要としない特殊なコードを書くことができるかもしれませんが、それが最も簡単で安全な方法です。パフォーマンスの観点から、リストアクセス領域のみをロックしたい場合があります...つまり、1 つのスレッドで操作 -> ロック -> 挿入 -> ロック解除し、もう 1 つのスレッドでロック -> 削除 -> ロック解除 -> 操作します。

于 2012-09-12T14:31:48.420 に答える