2010-10-22 4 views

Répondre

2

Vous pouvez définir un gestionnaire de signal, disons pour SIGUSR1, pour le thread qui bloquera alors, à partir d'un autre thread, vous appelez pthread_cancel(tid) et pthread_kill(tid, SIGUSR1). Le fil sera annulé une fois que sem_wait() est interrompu par le signal.

+2

Attention, vous ne définissez pas réellement les gestionnaires de signaux par thread, vous les définissez par processus. Vous pouvez toutefois définir des masques de signaux par thread pour contrôler la distribution des signaux asynchrones envoyés au processus. Principalement je le souligne parce que c'est une erreur commune de désinscrire le gestionnaire quand un thread se termine, mais cela va supprimer le gestionnaire pour chaque thread. –