0

シナリオ: 2 つのほぼ同一のベクトルがあります。それらは、単一のライターと複数のリーダーにサービスを提供するダブル バッファーのように機能します。1 つのベクトルはスレッド グループによって読み取られ、もう 1 つのベクトルは単一のスレッドによって書き込まれます。書き込みスレッドが更新を完了するとswap()、2 つのベクトルになります。このようにして、ライターが次の準備をしている間、読者は読み続けることができ、ライターはframe読者のことを心配することなく書き続けることができます。

質問: の実行中に 2 つのベクトルのサイズが同じであることが保証されているswap場合、スワップを行うときにロック メカニズムを使用しなくても安全ですか? swapそうでない場合、ライタースレッドのオーバーヘッドが大きくなりすぎずに安全であることを確認するための最善の方法は何でしょうか?

4

1 に答える 1

1

安全ではありません。2 つの値を入れ替えても安全な操作ではないことを考慮してください。この操作にはミューテックスを使用する必要があります。うまくいけば、スワッピングは (ベクトルの長さが異なる場合でも) 比較的低コストの操作であるため、スワップの保護は問題ないはずです。

スワップすると、ベクターのコンテンツへの参照が無効になり、リーダーの設計に影響を与える可能性があることに注意してください。

于 2013-10-23T09:55:37.417 に答える