标签: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