我正在尝试编写一个多线程程序,其中一个线程(下面的可变线程)负责可能设置为此进程的任何异步信号。
我面对使用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/