CAS 大概要多少个指令
时间: 2023-10-31 10:05:44 浏览: 41
CAS(Compare And Swap)指令是一种原子操作指令,用于实现多线程同步。CAS 指令的具体数量取决于 CPU 架构和指令集。常见的 x86 架构中,CAS 指令有以下几种:
1. CMPXCHG:比较并交换指令,用于比较寄存器值和内存值是否相等,如果相等则将新的值写入内存,否则不作修改。
2. CMPXCHG8B:比较并交换 8 字节指令,用于比较 8 字节数据的高 4 字节和低 4 字节是否分别相等,如果相等则将新的 8 字节数据写入内存。
3. CMPXCHG16B:比较并交换 16 字节指令,用于比较 16 字节数据的高 8 字节和低 8 字节是否分别相等,如果相等则将新的 16 字节数据写入内存。
另外,不同的 CPU 厂商和型号还可能有自己的扩展指令,比如 Intel 的 TSX(Transactional Synchronization Extensions)指令集,用于实现事务内存(Transactional Memory)。
总的来说,CAS 指令的具体数量比较难以统计,而且随着硬件技术的不断发展,可能会新增或者淘汰一些指令。
相关问题
CAS为什么要在硬件层面实现
CAS(比较并交换)是实现多线程同步的一种机制,需要在硬件层面实现,这主要是因为:
1. 原子性保证:CAS操作需要保证原子性,即同时只能有一个线程能够成功执行CAS操作,并且不会被其他线程打断。CPU提供硬件级别的原子操作指令,可以保证CAS操作的原子性。
2. 性能优化:CAS操作需要频繁地对共享内存进行读写操作,如果采用软件级别的实现方式,将会增加很多额外的开销,因此使用硬件实现能够提高CAS操作的性能。
3. 平台无关性:通过在硬件层面实现CAS操作,可以保证在不同的平台上都能够正确地实现CAS操作,避免了在不同平台上实现的差异性产生的问题。
综上所述,硬件层面的CAS操作能够提供原子性、性能优化以及平台无关的优势,因此被广泛应用在多线程编程和并发控制中。
cas底层使用了cpu的lock指令,为啥还是乐观锁
CAS(Compare and Swap)操作是一种乐观锁的实现。虽然在 CAS 操作的实现中使用了 CPU 的 lock 指令,但其本质上仍然是乐观锁。这是因为,在 CAS 操作中,我们假设更改操作不会与其他并发操作发生冲突,因此在执行时不需要加锁。如果发现其他并发操作已经修改了被操作的数据,那么 CAS 操作会失败并立即返回,让上层应用程序重新尝试操作。
使用 CAS 操作实现乐观锁的好处在于,相对于悲观锁的加锁操作,CAS 操作无需进行加锁和解锁的操作,避免了由于频繁加锁和解锁而导致的性能瓶颈。在并发量不是很高的情况下,使用 CAS 操作实现乐观锁可以更好地发挥系统性能。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)