首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在什么情况下,一个互斥锁可以在同一线程中被多次锁定?

问在什么情况下,一个互斥锁可以在同一线程中被多次锁定?
EN

Stack Overflow用户
提问于 2010-08-22 10:48:42
回答 2查看 322关注 0票数 1

如果互斥锁可以被线程递归锁定,我就不理解互斥锁的用法。为什么有人要递归地锁定互斥锁呢?在什么情况下,他们会使用这个?

EN

回答 2

Stack Overflow用户

发布于 2010-08-22 10:53:39

如果互斥锁可以被线程递归锁定,我就不明白它的用法了。

互斥锁用于提供对资源的互斥访问。换句话说,一次应该只有一个线程(或“代理”)能够访问资源。因此,如果一个线程已经获取了一个互斥锁,那么它就已经独占地访问了该资源,所以允许它再次获取该互斥锁是没有坏处的。

递归互斥锁仍然很有用,因为它仍然提供独占访问的语义。虽然线程1可以获取它已经拥有的互斥锁,但线程2仍然被阻止获取互斥锁并与线程1同时访问资源。

为什么有人要递归地锁定互斥锁?

为了方便起见:如果我的线程访问几个不同类中的资源,每个类都可以以嵌套的方式独立地获取和释放互斥锁,而不必担心彼此。这可能被看作是懒惰或糟糕的设计,但与非递归互斥相比,这是一个优势,当线程试图获取它已经拥有的互斥时,非递归互斥会导致死锁。

票数 2
EN

Stack Overflow用户

发布于 2010-08-22 10:56:56

看起来你在询问一个可重入锁的可能用例。一种是在使用回调的情况下。您可能有一个锁定对象的方法,然后调用其他对象,提供对此对象的访问的回调。如果在这个对象上调用了另一个方法,它可能也想要获得锁。它们都拥有锁是完全安全的,它们不可能同时运行,它们在同一个线程中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3539907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档