gpt4 book ai didi

c++ - sigwait()在多线程程序中不起作用

转载 作者:行者123 更新时间:2023-12-02 10:36:21 29 4
gpt4 key购买 nike

我正在尝试编写一个多线程程序,其中一个线程(下面的可变线程)负责可能设置为此进程的任何异步信号。

我面对使用sigwait()但不响应已发送给进程的任何信号的线程。 (例如下面的SIGUSR1)。

static void * signal_thread(void *arg = nullptr)
{
int sig = -1;
sigset_t sigset;
sigfillset(&sigset);
pthread_sigmask(SIG_BLOCK, &sigset, NULL);
while(1)
{
int s = sigwait(&sigset, &sig);
if(s == 0)
printf("SIG %d recieved!...\n", sig);
usleep(20);
}
}

int main()
{
sigset_t signalset;
pthread_t thread;
pthread_create(&thread, NULL, &signal_thread, nullptr);
sigfillset(&signalset);
pthread_sigmask(SIG_BLOCK, &signalset, NULL);

while(1)
{
raise(SIGUSR1);
usleep(20);
}
}

最佳答案

该问题涉及两个问题:

首先,对主发送信号的调用仅向主线程发送而不是整个过程。

其次,应使用std::cout代替signal_thread中的printf。

关于c++ - sigwait()在多线程程序中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60133787/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com