[闲聊] mutex_lock 是会直接把执行续卡住吗

楼主: Wardyal (Wardyal)   2024-08-08 15:26:16
func1()
{
...
...
...
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
恐龙书在家 而且我没看完过
作者: lovez04wj06 (车前草)   2024-08-08 15:44: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里面
作者: lovez04wj06 (车前草)   2024-08-08 15:50:00
他会卡在你下的那个位置,先进应该是先解的,但你的假程式… lock …前面有一部分会执行到,后面也有。你解锁的话第二次的func1也会执行到一部分然后进锁
楼主: Wardyal (Wardyal)   2024-08-08 15:52:00
恩恩 大概懂了 感谢
作者: lovez04wj06 (车前草)   2024-08-08 15:52:00
反正逻辑就是,你锁几次,就要解几次,没解到一样的数量一定有鬼
作者: qpeo0122   2024-08-08 16:09:00
用这个,std::lock_guard<std::mutex> lock(mtx);

Links booklink

Contact Us: admin [ a t ] ucptt.com