先看一个案例:
std::mutex g_mutex;
void fun2()
{
std::lock_guard<std::mutex> lc(g_mutex);
cout << "我是fun2\n";
}
void fun1()
{
std::lock_guard<std::mutex> lc(g_mutex);
cout << "我是fun1\n";
fun2();
}
void main()
{
fun1();
system("pause");
}
结果:
这是由于同一个互斥量连续枷锁多次导致的。那如何改进呢?如果逻辑上可以优化尽量优化逻辑,实现不行就使用
std::recursive_mutex 递归的独占互斥量
完整代码:
std::recursive_mutex g_mutex;
void fun2()
{
std::lock_guardstd::recursive_mutex lc(g_mutex);
cout << “我是fun2\n”;
}
void fun1()
{
std::lock_guardstd::recursive_mutex lc(g_mutex);
cout << “我是fun1\n”;
fun2();
}
void main()
{
fun1();
system("pause");
}
结果: