C++内存模型
前言rgb一文中,我们已经介绍了C++11到C++17在并发编程方面的新增API。rgbrgbrgb[*]可能会出现死锁并发的效率不够
rgbrgbrgbrgb。关于C++内存模型rgb:JSR-133。但C++直到2011标准才引入了内存模型。rgbrgbrgbrgbrgbrgb
[*]元子操作:顾名思义,这类操作一旦执行就不会被打断,你无法看到它的中间状态,它要么是执行完成,要么没有执行。
[*]操作的局部顺序:一系列的操作不能被乱序。操作的可见性:定义了对于共享变量的操作如何对其他线程可见。
为什么需要内存模型?rgbrgbrgb
[*]编译器优化
[*]CPU out-of-order执行CPU Cache不一致性
rgbMemory Reorderrgbrgb 0, Y = 0;Thread 1: X = 1; // ①r1 = Y; // ②Thread 2: Y = 1;r2 = X;
rgb。rgbrgbrgbrgbrgb)。在这个基础上,它们可以做各种类型的优化。编译器优化rgb。rgbrgb A, B;void foo(){ A = B + 1; B = 0;}
rgbrgb A, B;void foo(){ int temp = B; B = 0; A = temp + 1;}
rgbrgbrgb的工具给开发者,让开发者告诉编译器:这部分代码编译的时候不能乱序。rgbrgb A, B;void foo(){ A = B + 1; asm volatile("" ::: "memory"); B = 0;}
Out-of-order执行rgbrgbrgbrgbrgbrgbrgb一篇文章中给出的对比关系图。rgbrgbrgb
[*]Weak vs. Strong Memory Models
[*]This Is Why They Call It a Weakly-Ordered CPU
[*]A Tutorial Introduction to the ARM and POWER Relaxed Memory Modelsx86-TSO: A Rigorous and Usable Programmer’s Model for x86 Multiprocessors
rgbrgb), void _mm_lfence(void)sfence (asm), void _mm_sfence(void)mfence (asm), void _mm_mfence(void)
rgbCache Coherencyrgbrgbrgbrgbrgbrgbrgbrgb对象和内存位置rgbrgbrgbrgb
[*]标量类型(Scalar Type)的对象,标量类型包括下面几种:
[*]数字类型:整数或者浮点数
[*]T *指针类型
[*]枚举类型
[*]指向成员的指针
[*]nullptr_t
相邻位域(Bit field)的最大序列
位域rgbrgbrgb S { // 三位的无符号位域, // 允许值为 0...7 unsigned int b : 3;};
rgbrgbrgb S { char a; // 内存位置 #1 intb : 5; // 内存位置 #2 intc : 11, // 内存位置 #2 (接续,相邻位域占用同一个内存位置) : 0, // 无名位域,分隔了下一个位域 d : 8; // 内存位置 #3 (由于存在0值无名位域,这里是一个新的内存位置) struct { int ee : 8; // 内存位置 #4 } e;} obj;
rgbrgbrgbrgb修改顺序rgbrgbrgbrgbrgb
[*]对于原子类型(见下文):由编译器保证数据的同步。对于非原子类型:由开发者保证。
rgb一文中,就是通过互斥体来对非原子类型数据进行数据同步的。rgbrgbrgbrgb关系术语rgbsequenced-beforergbrgbrgbrgb i = 7; // ①i++; // ②
rgbrgbrgb i++ + i;
rgbhappens-beforergbrgbrgbrgbsynchronizes-withrgbrgbrgbrgb原子类型与原子操作rgbrgbrgb关于volatile和原子类型:Java和C++都有volatile关键字。但同样的关键字在不同的语言中有着不同的含义。Java中的volatile和C++的原子类型是类似的含义。而C++中的volatile是禁止编译器对这个变量进行优化。
资源下载地址和密码(百度云盘):**** Hidden Message ***** 百度网盘信息回帖可见
本资源由Java自学网收集整理【www.javazx.com】 淡定,淡定,淡定…… 楼猪V5啊 可以看看吗 看起来好像不错的样子 佩服佩服! 学习了学习了学习了:) 学习编程好地方 加油 哈哈哈哈哈,开心 不错 支持一个了