开发者社区 问答 正文

如何更新 MDL_lock::m_granted 链表和 MDL_lock::m_fast_path

物化过程中,如何更新 MDL_lock::m_granted 链表和 MDL_lock::m_fast_path_state?

展开
收起
不吃核桃 2024-08-05 23:43:47 37 分享 版权
1 条回答
写回答
取消 提交回答
  • 在物化过程中,首先通过调用 lock->m_granted.add_ticket(ticket) 将 MDL_ticket 添加到 MDL_lock 的 m_granted 链表中。然后,在持有 MDL_lock::m_rwlock 的写锁的情况下,使用CAS操作(lock->fast_path_state_cas)来原子地从 MDL_lock::m_fast_path_state 中减去相应的 unobtrusive_lock_increment,并设置 HAS_SLOW_PATH 标志。这样,既更新了已授予锁的状态,又确保了操作的原子性和一致性。

    2024-08-06 08:11:18
    赞同 2 展开评论
问答地址: