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