【发布时间】:2020-05-24 18:58:42
【问题描述】:
我正在尝试编写一个多线程程序,其中一个线程(下面的变量线程)负责可能设置给该进程的任何异步信号。
我正面临使用 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);
}
}
【问题讨论】:
-
信号和线程相互过敏。您要么需要踮起脚尖,要么需要隔离。后者更好。
标签: c++ multithreading signals