在下面的代码中,我没有使变量quit具有volatile sig_atomic_t.我把它留作平原int.
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
#define UNUSED(x) (void) (x)
int quit;
void sigusr1_handler(int sig)
{
UNUSED(sig);
write(1, "handler\n", 8);
quit = 1;
}
int main()
{
struct sigaction sa;
sa.sa_handler = sigusr1_handler;
sa.sa_flags = 0;
sigemptyset(&sa.sa_mask);
if (sigaction(SIGUSR1, &sa, NULL) == -1) {
perror("sigaction");
return 1;
}
quit = 0;
while (!quit) {
printf("Working ...\n");
sleep(1);
}
printf("Exiting ...\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
由于未将quit变量指定为volatile,我期望编译器的优化器会优化while代码中的-loop: …
如果我在具有原子读取和递增/递减支持的硬件上,我是否可以使用volatile sig_atomic_tC++ 03来访问原子操作并避免使用完整的互斥锁,或者我必须等待C++ 11和std::atomic<int>?