怎么能/在什么情况下可以在同一个线程中多次锁定互斥锁?

时间:2010-08-22 02:48:42

标签: operating-system mutex

如果它可以被线程递归锁定,我不明白使用互斥锁。为什么有人想要递归锁定互斥锁?他们会在什么情况下使用它?

2 个答案:

答案 0 :(得分:2)

  

我不明白使用互斥锁   如果可以通过a递归锁定   线程。

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

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

  

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

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

答案 1 :(得分:0)

似乎你要求一个可重入锁定的用例。一个是使用回调的东西。您可能有一个方法可以锁定一个对象,然后调用其他东西,提供一个可以访问该对象的回调。如果在此对象上调用另一个方法,则可能还需要获取锁。对于他们来说,拥有锁是完全安全的,两者都无法同时运行,他们在同一个线程中。