码迷,mamicode.com
首页 > 其他好文 > 详细

sig_atomic_t类型与volatile限定符

时间:2016-05-07 01:18:03      阅读:276      评论:0      收藏:0      [点我收藏+]

标签: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” 博客,转载请与作者联系!

sig_atomic_t类型与volatile限定符

标签:volatile

原文地址:http://10707042.blog.51cto.com/10697042/1770879

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!