関数にアクセスしようとするスレッド(マップ)があるので、関数内でstd :: mapと2つのboost :: multimapsの操作をロックする必要があります。何より良いstd :: lock_guard <std::mutex>ロック(std :: mutex mutex_var);またはstd :: mutex mutex_var.lock();
"std :: mutex mutex_var"を使用して、それらを操作する関数内の変数を保護することを計画しています。だから私は "std :: mutex mutex_var"変数を持っています。私は関数の最初に "mutex_var.lock()"を使用し、関数の最後に "mutex_var.unlock()"を使用するのは混乱しています。単に関数の先頭でstd :: lock_guardを使用しますか?
明確にするために、すべての機能はミューテックスに物事を追加しています。私は理解しています/私たちが地図を照会しようとしているすべての場所を守る必要はない(読み込み操作だけなので)。
もっと良い選択肢を教えてください。また、私の読書の考え方が保護を必要としないかどうかを明確にしてください。シンプルなミューテックスで
TIA
-R
一度に1つの質問をする必要があります。 – Slava
ミューテックスをロックしている間に例外がスローされるとどうなりますか? –
mutex.lock()に問題があるかもしれませんが、スタックフレームが消えてlock_guardがスコープを失ってロックが解除されるため、std :: lock_guard(mutex_var)がうまくいくと思っていました。私が間違っていれば私を修正してください。 – codeworks