折返锁:优点和缺点?

时间:2011-07-09 23:39:23

标签: multithreading algorithm

在什么情况下人们想要使用折返锁而不是普通锁?

2 个答案:

答案 0 :(得分:8)

简单/常规锁定和重入锁定之间的主要区别在于简单锁定允许一个线程在给定时间点获取锁定,保持每个其他线程等待,包括持有锁定的线程,如果它尝试再次锁定。可重入锁允许同一个线程根据需要多次获取锁,只要它们已经持有锁,并将所有其他线程保持在等待队列中以进行相同的锁定。

重入锁定在需要递归时通常很有用。想象一下,你有一个需要获取锁执行的递归函数。如果您使用的是简单的锁,那么您的第一个线程很容易死锁。递归的第一次迭代将成功获取锁,第二次迭代将尝试再次获取锁,但将永远阻塞。第二次迭代将等待第一次迭代解锁,但第一次迭代不会解锁,除非第二次迭代完成。

重入锁在这里很有用,因为一旦一个线程持有锁,它就可以在此之后锁定多次。唯一的问题是你的线程必须解锁锁定次数,使其类似于计数信号量。

答案 1 :(得分:5)

我认为重入锁会比普通锁具有一些额外的开销 - 检查正在获取锁的线程。

因此,如果您知道在正常操作下线程只会在再次释放之前获取一次锁定,您可以通过使用普通锁定获得一些性能。这在紧密循环等方面尤其有用。