当前位置:   article > 正文

C++并发编程 | CAS的基本原理剖析(无锁编程、无锁数据结构)_cas c++

cas c++

关于volatile

C/C++ 语言中的volatile关键字作用

  • 易变性:volatile告诉编译器,某个变量是易变的,当编译器遇到这个变量的时候,只能从变量的内存地址中读取这个变量,不可以从缓存、寄存器、或者其它任何地方读取。

  • 顺序性:两个包含volatile变量的指令,编译后不可以乱序。注意是编译后不乱序,但是在执行的过程中还是可能会乱序的,这点需要由其它机制来保证,例如memory- barriers。

    上面提到的俩个点已经全面覆盖了c/c++下volatile的全部功能。这里特别说明的是各个语言下volatile的意义和功能作用是不一样的,在java下volatile的功能要比上述提到的功能还要强大。

C/C++中的volatile并不是用来解决多线竞争问题的,而是用来修饰一些程序不可控因素导致变化的变量,比如访问底层硬件设备的变量,来提醒编译器不要对该变量的访问擅自进行优化。

C++11标准明确指出解决多线程的数据竞争问题应该使用原子操作或互斥锁

CAS的基本原理

高并发服务器经常用到多线程编程,需要对共享数据进行操作,为了保护数据的正确性,有一种有效的方法就是加锁机制,但这种方式存在以下一些缺点:

  • 在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时ÿ
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/877166?site
推荐阅读
相关标签
  

闽ICP备14008679号