相关疑难解决方法(0)

在并发访问数据库的上下文中,锁和锁存器之间有什么区别?

我试图理解一篇关于并发B树的论文,其中作者提到了latch vs lock,以及latch如何不需要"Lock Manager".我一直试图弄清楚这两者之间的差异是两天.

谷歌导致:

"锁保证数据的逻辑一致性.它们通过锁表实现,长时间保持(例如2PL),以及部分死锁检测机制.

锁存器就像信号量.它们确保数据和资源的物理一致性,这在交易级别是不可见的"

但是,我仍然很困惑.有人可以详细说明这个吗?锁经理到底做了什么?

提前谢谢〜

database concurrency locking

34
推荐指数
4
解决办法
2万
查看次数

旋锁,它们有用吗?

您经常在代码中发现自己使用自旋锁的频率是多少?遇到使用繁忙循环实际上优于锁的使用情况的情况有多常见?
就个人而言,当我编写某种需要线程安全的代码时,我倾向于使用不同的同步原语对其进行基准测试,并且就其而言,使用锁似乎比使用自旋锁具有更好的性能.无论我实际持有锁的时间有多少,使用自旋锁时我收到的争用量远大于使用锁时获得的数量(当然,我在多处理器机器上运行我的测试).

我意识到它更有可能在"低级"代码中遇到一个螺旋锁,但我很想知道你是否发现它甚至可以用于更高级的编程?

c# c++ multithreading locking spinlock

33
推荐指数
7
解决办法
2万
查看次数

为什么禁用中断会禁用内核抢占以及自旋锁如何禁用抢占

我最近正在阅读Linux内核开发,我有一些与禁用抢占相关的问题.

  1. 在第7章的"中断控制"部分,它说:

    此外,禁用中断还会禁用内核抢占.

    我还从书中读到,在以下情况下可能会发生内核抢占:

    当中断处理程序退出时,返回内核空间之前.
    当内核代码再次成为可抢占状态时.
    如果内核中的任务显式调用schedule()
    如果内核中的任务阻塞(导致调用schedule())

    但我无法将禁用中断与这些情况联系起来.

  2. 据我所知,自旋锁将使用preempt_disable()函数禁用抢占.

    帖子究竟什么是"自旋锁"? 说:

    在单核心机器上,自旋锁只是"禁用中断"或"引发IRQL",这完全阻止了线程调度.

    preempt_disable()是否通过禁用中断来禁用抢占?

linux interrupt linux-kernel preemption spinlock

11
推荐指数
1
解决办法
1万
查看次数