私はstd::mutex
とstd::lock_guard
を使用しようとしているので、スレッドセーフな関数呼び出しをスレッドセーフにする必要があります。現在のコードは次のようになります。静的なmutexで静的なlock_guardもありますか?
int myFunc(int value){
static std::mutex m;
std::lock_guard lock(m);
auto a = unsafe_call(value);
return a;
}
unsafe_call()
はスレッドに不安全な関数です。私はmutexの周りにstaticを置いています。なぜなら、関数は別々の呼び出しごとに異なるmutexを持つからです。
lock_guard
私が知りたいことは、私が私の同僚に言われたように、mutexが静的なものであるためです。私はlock_guard
を単純な0と.unlock()
と呼んでいると考えているので、なぜ私はこれを行う必要があるのかわかりませんが、同僚の提案は私を混乱させています。
静的な 'lock_guard'の目的を無効にする – NathanOliver
静的な' std :: mutex'はうまくいくようです(どこかに保存しなければならないかもしれませんが、よりエルエルギィに保存する必要があります)が、Nathanは 'lock_guard'のctorロックmutexとdtorがロックを解除します。ロックが静的ロックの場合、ミューテックスは決してロック解除されません。 – hauron
あなたの同僚は、話していることを知らない。 'lock_guard'がどのように動作するかについてのあなたの理解は、彼らのものよりも優れています。 – WhozCraig