Posix-Threads blockieren das Signal und heben die Blockierung auf

Gibt es eine Möglichkeit, bestimmte Signale im selben Set zu blockieren und andere zu entsperren? Ich scheine es einfach nicht zu verstehen!

Ein Beispiel

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;
    }
}

Ich darf keine Mutexs, Semaphore usw. nur Signale verwenden.

Kann jemand helfen? :)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage