据说信号处理程序需要 volatile,例如,
volatile int flag = 1; // volatile is needed here?
void run() {
while(flag) { /* do someting... */ }
}
void signal_handler(int sig) {
flag = 0;
}
int main() {
signal(SIGINT, sig_handler);
run();
// ...
}
据说多线程中往往不使用 volatile。但是多线程中的类似情况又如何呢:
int flag = 1; // is volatile needed here?
void thread_function() {
while(flag) { /* do someting... */ }
}
int main() {
// pthread_create() to create thread_function()...
sleep(10); // let thread_function run for 10 seconds
flag = 0;
// ...
}
在这两种情况下都应该使用 volatile 关键字吗?编译器对这两种情况的处理方式是否相同?
唯一允许您从信号处理程序修改的非本地值是类型的值volatile sig_atomic_t
和原子类型。特别是写信给您volatile int
is not允许,并且如果您的信号处理程序运行,则您有未定义的行为。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)