我问这个问题是因为mutex我发现文档处理单个函数,我认为我的情况很常见。
我的问题是以下代码是否不仅会阻止func1()
OR func2()
并行执行多次,但它是否也会阻止func1()
AND 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();
}
据我所知,很多人通常从 Stackoverflow 复制代码,在添加 @Al_Bundy 的输入后,我添加了示例代码的另一个版本 - 使用 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 ...
}
是的,只要同一个互斥体被锁定,就不能从其他任何地方锁定它,直到它被解锁。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)