首页 > 其他分享 >lock cmpxchg

lock cmpxchg

时间:2023-12-08 14:55:06浏览次数:19  
标签:lock 总线 指令 处理器 cmpxchg 锁定

cmpxchg 和 xchg 指令都会锁总线,

那么,为什么要加lock 前缀呢?

LOCK#前缀不会占用额外的字节,而是作为指令的一部分。它会被编码为一个特定的操作码前缀,告知处理器在执行指令期间锁定总线或等效连接

因为:

  1. 对于cmpxchg 和 xchg总线锁而言

当处理器执行cmpxchg和 xchg指令并锁定总线时,它会保持对总线的锁定,直到指令执行完成并释放总线锁。从这个意义上说,锁定总线的时间应该是指令执行的时间
因为这个时间非常短,而在其它处理器上已经正在执行的指令可能更复杂的计算和内存访问操作,所以该指令的执行可能会掩盖锁定总线的时间,而此时该指令可能会操作cmpxchg或xchg指令操作的内存区域。
使用lock前缀可以解决该问题,

inter手册描述

Intel 64和IA-32处理器提供了一个在某些内关键内存操作期间可自动断定lock#信号,用于去锁定系统总线或等效构件。当这个lock#信号被声明/断言时,来自其他处理器或总线代理的总线控制请求会被阻塞。

个人感觉,它好像也会block指定的内存地址总线

2.即使每个处理器在执行cmpxchg指令时都锁定了总线,但是在多处理器环境中,处理器的缓存可能会导致数据不一致性的问题。

当使用lock前缀,如果操作的内存已经在某个内核的缓存中,那么cpu会lock cache,同时以该内核执行指令

标签:lock,总线,指令,处理器,cmpxchg,锁定
From: https://www.cnblogs.com/xiezhengcai/p/17887178.html

相关文章

  • Java synchronized 、ReentrantLock和Semaphore
    synchronized在Java中,使用synchronized关键字可以实现对代码块或方法的同步访问,以确保多个线程不会同时访问共享资源。当一个线程获取了对象的锁(即进入了synchronized代码块),其他线程如果也希望获取该对象的锁,它们将被阻塞,直到拥有锁的线程执行完毕并释放锁。因此,在某种意义上,使......
  • Mac capslock大写锁定键切换中英文的输入法新选择
    工作电脑是Mac,家里的电脑是Win。Mac上一直使用的是Rime输入法,用了https://github.com/iDvel/rime-ice这位大佬的配置Win上用的是搜狗用完搜狗再用Rime的时候,总是能感觉Rime的候选词策略很不顺手,搜狗一般是打出什么就是什么了,Rime就经常不符合期望。而且Rime的......
  • 【UVA 101】The Blocks Problem 题解(模拟+向量)
    计算机科学的许多领域使用简单、抽象的领域进行分析和实证研究。例如,早期的人工智能规划和机器人研究(STRIPS)使用了一个区块世界,其中机器人arm执行涉及块操作的任务。在这个问题中,您将在某些规则和约束下对一个简单的块世界进行建模。相当地与确定如何达到指定状态相比,您将“编程......
  • ReenTrantLock可重入锁(和synchronized的区别)总结
    可重入性:从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大。两者都是同一个线程没进入一次,锁的计数器都自增1,所以要等到锁的计数器下降为0时才能释放锁。锁的实现:Synchronized是依赖于JVM实现的,而ReenTra......
  • SQLServer解决deadlock问题的一个场景
    SQLServer解决deadlock问题的一个场景背景公司产品出现过很多次deadlock跟研发讨论了很久,都没有具体的解决思路但是这边知道了一个SQLServer数据库上面计划100%出现问题的场景然后想着跟之前微软case一起处理一下看能否解决这个问题.整体思路1.修改默认的隔离级别......
  • uva101The Blocks Problem
    原题链接TheBlocksProblem-洛谷|计算机科学教育新生态(luogu.com.cn)一道模拟题。(水题) 但模拟过程很有意思,怎么样才能用最短的代码完成所有操作,使代码更简洁是很考验技术的。 #include<bits/stdc++.h>usingnamespacestd;vector<int>block[30];vector<int>m;......
  • PriorityBlockingQueue 优先级队列
    packagestudy;importlombok.Data;importjava.util.Comparator;importjava.util.concurrent.PriorityBlockingQueue;publicclassPriorityBlockingQueueDemo{publicstaticvoidmain(String[]args)throwsInterruptedException{PriorityBlocki......
  • 阻塞队列之 LinkedBlockingQueue
    LinkedBlockingQueue:Java多线程编程中的阻塞队列在Java多线程编程中,LinkedBlockingQueue是一个非常重要的类,它提供了一种用于在生产者和消费者之间进行数据传递的机制。LinkedBlockingQueue广泛应用于各种场景,如线程池、任务队列等。本文将详细介绍LinkedBlockingQueue的原理......
  • 简化版Transformer :Simplifying Transformer Block论文详解
    前言 本文探讨了来自苏黎世联邦理工学院计算机科学系的BobbyHe和ThomasHofmann在他们的论文“SimplifyingTransformerBlocks”中介绍的Transformer技术的进化步骤。这是自Transformer开始以来,我看到的最好的改进。本文转载自DeephubImba作者|FreedomPreetham仅用于学......
  • kubeblocks的使用
    介绍:它是基于Kubernetes的云原生数据基础设施,为用户提供了关系型数据库、NoSQL数据库、向量数据库以及流计算系统的管理控制功能。可以使用提供的命令轻松部署处理数据库实例。github:https://github.com/apecloud/kubeblocks官网:https://kubeblocks.io1.初步使用安装kbcli:......