折返锁:优点和缺点?

bit*_*cle 6 algorithm multithreading

在什么情况下,人们想要使用折返锁与普通锁?

Moe*_*tar 8

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

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

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

  • 这更像是对重入锁的描述,而不是对其优缺点的讨论.你为什么不总是使用重入锁? (2认同)

Fog*_*ird 5

我认为,与普通锁相比,可重入锁会有一些额外的开销 - 检查正在获取锁的线程.

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