我试图理解一篇关于并发B树的论文,其中作者提到了latch vs lock,以及latch如何不需要"Lock Manager".我一直试图弄清楚这两者之间的差异是两天.
谷歌导致:
"锁保证数据的逻辑一致性.它们通过锁表实现,长时间保持(例如2PL),以及部分死锁检测机制.
锁存器就像信号量.它们确保数据和资源的物理一致性,这在交易级别是不可见的"
但是,我仍然很困惑.有人可以详细说明这个吗?锁经理到底做了什么?
提前谢谢〜
您经常在代码中发现自己使用自旋锁的频率是多少?遇到使用繁忙循环实际上优于锁的使用情况的情况有多常见?
就个人而言,当我编写某种需要线程安全的代码时,我倾向于使用不同的同步原语对其进行基准测试,并且就其而言,使用锁似乎比使用自旋锁具有更好的性能.无论我实际持有锁的时间有多少,使用自旋锁时我收到的争用量远大于使用锁时获得的数量(当然,我在多处理器机器上运行我的测试).
我意识到它更有可能在"低级"代码中遇到一个螺旋锁,但我很想知道你是否发现它甚至可以用于更高级的编程?
我最近正在阅读Linux内核开发,我有一些与禁用抢占相关的问题.
在第7章的"中断控制"部分,它说:
此外,禁用中断还会禁用内核抢占.
我还从书中读到,在以下情况下可能会发生内核抢占:
当中断处理程序退出时,返回内核空间之前.
当内核代码再次成为可抢占状态时.
如果内核中的任务显式调用schedule()
如果内核中的任务阻塞(导致调用schedule())
但我无法将禁用中断与这些情况联系起来.
据我所知,自旋锁将使用preempt_disable()函数禁用抢占.
帖子究竟什么是"自旋锁"? 说:
在单核心机器上,自旋锁只是"禁用中断"或"引发IRQL",这完全阻止了线程调度.
preempt_disable()是否通过禁用中断来禁用抢占?
locking ×2
spinlock ×2
c# ×1
c++ ×1
concurrency ×1
database ×1
interrupt ×1
linux ×1
linux-kernel ×1
preemption ×1