c – std :: mutex :: try_lock虚假失败?

也许I’m misunderstanding关于std :: mutex :: try_lock:

即使互斥锁当前未被任何其他线程锁定,也允许此函数虚假失败并返回false.

这意味着如果没有一个线程锁定该互斥锁,当我尝试try_lock时它会返回false?出于什么目的?

如果没有锁定,try_lock的函数是否会返回false,如果它被锁定则返回true?不确定我的非母语英语是否在欺骗我…

解决方法:

This means that if no one thread has a lock of that mutex, when I try a try_lock, it could return false?

是的,这正是它所说的.

Isn’t the function of try_lock return false if its locked OR true if nobody lock it?

不,try_lock的功能是尝试锁定互斥锁.

但是,失败的方法不止一种:

>互斥锁已经锁定在其他位置(这是您正在考虑的那个)
>某些特定于平台的功能会中断或阻止锁定尝试,并且控制权将返回给可以决定是否重试的调用方.

在POSIX-ish平台上,从POSIX线程继承的常见情况是,信号被传递到当前线程(并由信号处理程序处理),从而中断锁定尝试.

在其他平台上可能存在其他特定于平台的原因,但行为是相同的.

上一篇:小甲鱼Python第027讲集合:在我的世界里,你就是唯一 | 课后测试题及参考答案


下一篇:c – 什么是可扩展锁?