リストにペア(「キー/値」)を挿入するスレッドと、同じリストからペアを削除するスレッドが2つあります。これで、これらのスレッドが同じ「キーと値」のペアを決して変更しないことを保証できます。
そのスレッドは、リストをミューテックスで保護する必要がありますか?
ありがとう。
リストにペア(「キー/値」)を挿入するスレッドと、同じリストからペアを削除するスレッドが2つあります。これで、これらのスレッドが同じ「キーと値」のペアを決して変更しないことを保証できます。
そのスレッドは、リストをミューテックスで保護する必要がありますか?
ありがとう。
一般に、std コンテナーに対するあらゆる種類の変更は絶対に保護する必要があります。
読み取りには読み取りロックを使用し、書き込みには書き込みロックを使用して、pthread_rwlock の使用を検討できます。rwlocks の良いところは、複数のリーダーを同時に持つことができるため、ロックの競合が減少することです。または、少なくとも pthread_mutex。(もちろん、Linuxを想定しています)
わかりました、これはリンクされたリストですよね? だから、A->C->D
あなたが削除を開始すると想像してくださいC
。A
「わかりました、のptrをリダイレクトする必要がありnext
ます。しかし、その前に、 の挿入を開始しますB
。これは中断されることなく完了し、最終的に になりますA->B->C->D
。その後、削除が続行され、A
の代わりに変更B
されます。最終的にはA->D
andになりnothing->B->who knows?
ます。だからロック。
ミューテックスが必要なように聞こえます...挿入および消去機能に伴うリスト管理があり、その衝突は望ましくありません。リスト管理の正確な実装の詳細を知っていれば、ミューテックスを必要としない特殊なコードを書くことができるかもしれませんが、それが最も簡単で安全な方法です。パフォーマンスの観点から、リストアクセス領域のみをロックしたい場合があります...つまり、1 つのスレッドで操作 -> ロック -> 挿入 -> ロック解除し、もう 1 つのスレッドでロック -> 削除 -> ロック解除 -> 操作します。