标签:volatile
sig_atomic_t类型与volatile限定符
volatile:防止编译器优化
代码:
1 #include<stdio.h>
2 #include<signal.h>
3 int a=0;
4 void signal_handler(int signal)
5 {
6 printf("signal is coming\n");
7 a=1;
8 }
9 int main()
10 {
11 signal(2,signal_handler);
12 while(!a);
13 return 0;
14
15 }结果:
[admin@www SIGNAL]$ gcc -o thread_safety thread_safety.c -O3 [admin@www SIGNAL]$ ./thread_safety ^Csignal is coming ^Csignal is coming ^\退出 (core dumped)
编译器优化,直接从寄存器取值,为了防止优化,采用sig_atomic_t类型与volatile限定符。
4 volatile int a=0; 或 4 volatile sig_atomic_t a=0; 结果: [admin@www SIGNAL]$ gcc -o thread_safety thread_safety.c -O3 [admin@www SIGNAL]$ ./thread_safety ^Csignal is coming
本文出自 “liveyoung” 博客,转载请与作者联系!
标签:volatile
原文地址:http://10707042.blog.51cto.com/10697042/1770879