C 取消被阻止的Pthread

C 取消被阻止的Pthread,c,pthreads,semaphore,C,Pthreads,Semaphore,如果线程在sem\u wait()上被阻塞,如何使线程响应pthread\u cancel()?您可以为要阻塞的线程设置一个信号处理程序,比如说为SIGUSR1,然后从另一个线程调用pthread\u cancel(tid)和pthread\u kill(tid,SIGUSR1)。一旦信号中断sem_wait(),线程将被取消。请注意,您实际上并不是为每个线程设置信号处理程序,而是为每个进程设置信号处理程序。不过,您可以为每个线程设置信号掩码,以控制发送到进程的异步信号的传递。我之所以指出这一点

如果线程在
sem\u wait()
上被阻塞,如何使线程响应
pthread\u cancel()

您可以为要阻塞的线程设置一个信号处理程序,比如说为SIGUSR1,然后从另一个线程调用
pthread\u cancel(tid)
pthread\u kill(tid,SIGUSR1)
。一旦信号中断
sem_wait()
,线程将被取消。

请注意,您实际上并不是为每个线程设置信号处理程序,而是为每个进程设置信号处理程序。不过,您可以为每个线程设置信号掩码,以控制发送到进程的异步信号的传递。我之所以指出这一点,主要是因为在线程退出时注销处理程序是一个常见的错误,但这将删除每个线程的处理程序。