关于互斥体:我询问lock
here的效果以及try_lock
here的效果。
关于try_lock
的问题已被关闭,与lock
的问题完全相同。但是,我无法理解为什么try_lock
必须在每个可能的互斥实现中以与lock
相同的方式运行。
由于在下面的讨论中没有真正回答这个问题,我在这里把它作为一个新问题:
为什么会这样?是因为只有一种可能的方法可以实现try_lock
吗? (即最自然的方式。)
答案 0 :(得分:1)
try_lock
对给定互斥锁的性能与lock
的实现密切相关。如果锁定互斥锁始终需要系统调用,则try_lock
可能还需要系统调用。另一方面,如果lock
具有在没有系统调用的情况下在用户空间中运行的“快速路径”,则try_lock
可能具有与“快速路径”类似的实现。事实上,lock
的常见实现基本上是if(!try_lock()) lock_with_system_call()
。