C语言中的volatile到底有什么用?
volatile与编译器
int busy = 1;void wait() {while(busy) {;}}

wait:mov eax, DWORD PTR busy[rip]:test eax, eaxjne .L2retbusy:1
int busy = 1;// 该函数在A线程中执行void wait() {while(busy) {;}}// 该函数在B线程中执行void signal() {busy = 0;}

wait::mov eax, DWORD PTR busy[rip]test eax, eaxjne .L2retbusy:1

volatile与多线程
struct data {int a;int b;int c;...};volatile struct data foo;void thread1() {foo.a = 1;foo.b = 2;foo.c = 3;...}void thread2() {int a = foo.a;int b = foo.b;int c = foo.c;...}
volatile与memory order
volatile int busy = 0;
线程1 线程2X = 10 if (!busy)busy = 0; Y = X;

编程狮-前端交流群正在构建中
正在学习前端或者准备学习前端的小伙伴
都可以来加入我们
群里可以进行学习讨论、八卦闲谈
后面还将会派送福利哦~
想要加入的小伙伴
可以联系我们的学习顾问-七七 ↑
评论
