この質問はすべてmutexのドキュメントに書かれています。私は単一の関数を扱っています。C++:複数の関数が同時に実行されないようにする
私の質問は、次のコードは、並行して複数回実行されることからfunc1()
またはfunc2()
を防ぐことができますだけでなく、かどうか、それは同時に実行されてからfunc1()
とfunc2()
を妨げるかどうか?私は多くの人々を理解したよう
#include <mutex>
std::mutex my_mutex;
void func1() {
my_mutex.lock();
// do something ...
my_mutex.unlock();
}
void func2() {
my_mutex.lock();
// do something ...
my_mutex.unlock();
}
は通常、私はAl_Bundyの入力@追加した後、私のサンプルコードの別のバージョンを追加してい、stackoverflowのからコードをコピー - 機能は、このように終了したときに破壊されて使用してlock_guardは、必ずあなたのミューテックスを作ります機能が終了してガードが破壊されたときに解放されます。
#include <mutex>
std::mutex my_mutex;
void func1() {
std::lock_guard<std::mutex> locker(my_mutex);
// do something ...
}
void func2() {
std::lock_guard<std::mutex> locker(my_mutex);
// do something ...
}
同じミューテックスがロックされているよう
[std :: lock_guard](http://en.cppreference.com/w/cpp/thread/lock_guard)を使用しないのはなぜですか? –
非常に良い入力のようです - 正しく理解すれば、関数が終了するとlock_guardがmutexのロックを解除します。手動でロック解除するよりはるかに安全です – SomethingSomething
はい、正確です。私は**それを使用します**。 –