企业网站建设方案论文,做网站让人来注册,ppt模板下载的网站,找外贸客户的网站如有两个线程#xff0c;对一个变量进行操作#xff0c;一个线程读这个变量的值#xff0c;一个线程往这个变量中写值。即使是一个简单变量的读取和写入操作#xff0c;如果不加锁#xff0c;也有可能会导致读写值混乱#xff08;一条语句可能会被拆成3、4条汇编语句来执…如有两个线程对一个变量进行操作一个线程读这个变量的值一个线程往这个变量中写值。即使是一个简单变量的读取和写入操作如果不加锁也有可能会导致读写值混乱一条语句可能会被拆成3、4条汇编语句来执行所以仍然有可能混乱如操作被拆为先读取再计算再写入
使用std::mutex可以解决上述对临界资源访问的问题有时开销会很大。
原子性指一个操作或一组操作不可被中断地执行完毕或不执行。具有原子性的操作不会受到其他并发操作的干扰能够保证数据的一致性和正确性。通俗来说原子性就是一气呵成不可分割的意思。在多线程编程中原子性非常重要因为如果一个操作不具备原子性可能会导致数据出现错误或者不一致的情况如上述的。
std::atomicT包含在头文件atomic中实现原子操作不需要用到互斥量加锁无锁技术的多线程并发编程方式。从效率上来说原子操作要比互斥量的方式效率要高。互斥量的加锁一般是针对一个代码段而原子操作针对的一般都是一个变量。std::atomic来代表原子操作是个类模板。其实std::atomic是用来封装某个类型的值。支持变量的---|^操作的原子性。
参考
【C多线程】std::atomicT - Chen沉尘 - 博客园 (cnblogs.com)
原子性是什么意思-CSDN博客