C语言中的volatile到底有什么用?
volatile与编译器
int busy = 1;
void wait() {
while(busy) {
;
}
}
wait:
mov eax, DWORD PTR busy[rip]
:
test eax, eax
jne .L2
ret
busy:
1
int busy = 1;
// 该函数在A线程中执行
void wait() {
while(busy) {
;
}
}
// 该函数在B线程中执行
void signal() {
busy = 0;
}
wait:
:
mov eax, DWORD PTR busy[rip]
test eax, eax
jne .L2
ret
busy:
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 线程2
X = 10 if (!busy)
busy = 0; Y = X;
编程狮-前端交流群正在构建中
正在学习前端或者准备学习前端的小伙伴
都可以来加入我们
群里可以进行学习讨论、八卦闲谈
后面还将会派送福利哦~
想要加入的小伙伴
可以联系我们的学习顾问-七七 ↑
评论