楼主:
Wardyal (Wardyal)
2024-08-08 15:26:16func1()
{
...
...
...
mutex_lock(&my_lock)
...
return;
}
func2()
{
mutex_unlock(&my_lock)
}
我假如
func1();
func1();
那第一个func1()会顺利执行
然后第二个func1()会卡在mutex_lock()
直到我下func2() 是这样吗
我刚刚又把自己的code锁烂了
现在在debug
作者:
yam276 ('_')
2024-08-08 15:35:00恐龙书都有写
楼主:
Wardyal (Wardyal)
2024-08-08 15:36:00恐龙书在家 而且我没看完过
没理解错的话会卡在第一个吧?你解了一个他会执行第二个,然后又卡住。直到下第二次解锁才是完整完成。
楼主:
Wardyal (Wardyal)
2024-08-08 15:47:00喔喔 他会先解第二个喔我以为他是会先解第一个
作者:
argorok (s.green)
2024-08-08 15:47:00你这样lock 2次是undefined behavior吧
楼主:
Wardyal (Wardyal)
2024-08-08 15:48:00我现在是第二次跑会卡住 因为我中间有些retrun忘记unlock实际上unlock是定义在func1里面
他会卡在你下的那个位置,先进应该是先解的,但你的假程式… lock …前面有一部分会执行到,后面也有。你解锁的话第二次的func1也会执行到一部分然后进锁
楼主:
Wardyal (Wardyal)
2024-08-08 15:52:00恩恩 大概懂了 感谢
反正逻辑就是,你锁几次,就要解几次,没解到一样的数量一定有鬼
作者: qpeo0122 2024-08-08 16:09:00
用这个,std::lock_guard<std::mutex> lock(mtx);