标签: sig-atomic-t

在信号处理期间未使用volatile关键字时,演示编译器的优化效果?

在下面的代码中,我没有使变量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: …

c signals volatile sig-atomic-t

7
推荐指数
1
解决办法
96
查看次数

我可以使用volatile sig_atomic_t来避免C++ 03中的互斥锁吗?

如果我在具有原子读取和递增/递减支持的硬件上,我是否可以使用volatile sig_atomic_tC++ 03来访问原子操作并避免使用完整的互斥锁,或者我必须等待C++ 11和std::atomic<int>

c++ mutex volatile stdatomic sig-atomic-t

1
推荐指数
1
解决办法
1007
查看次数

标签 统计

sig-atomic-t ×2

volatile ×2

c ×1

c++ ×1

mutex ×1

signals ×1

stdatomic ×1