有沒有辦法阻止某些信號並解除同一組中的其他信號? 我只是似乎沒有得到我的頭!posix線程阻塞信號並解除阻塞
一個例子
sigset_t set;
sigemptyset(&set);
sigaddset(&set, SIGUSR1);
// Block signal SIGUSR1 in this thread
pthread_sigmask(SIG_BLOCK, &set, NULL);
sigaddset(&set, SIGALRM);
// Listen to signal SIGUSR2
pthread_sigmask(SIG_UNBLOCK, &set, NULL);
pthread_t printer_thread1, printer_thread2;
pthread_create(&printer_thread1, NULL, print, (void *)&f1);
pthread_create(&printer_thread2, NULL, print, (void *)&f2);
bool tl = true;
while(1)
{
if(tl)
{
// thread1 does something
kill(pid, SIGUSR1);
// main thread waits for SIGALRM
sigwait(&set, &sig);
tl = !tl;
}
else
{
// thread2 does something
kill(pid, SIGUSR2);
// main thread waits for SIGALRM
sigwait(&set, &sig);
tl = !tl;
}
}
我不允許使用Mutexs,信號燈等只有信號。
有人可以幫忙嗎? :)
你不是第一次封鎖SIGUSR1嗎?在UNBLOCK時,該集合包含SIGUSR1和SIGALRM。 – amaurea