请教:多线程模式下的信号处理问题
根据《实用UNIX编程》一书第十章——线程同步的介绍。在多线程模式下,对于一个发送到进程的信号,将在所有对该信号非阻塞的线程中调度一个来处理该信号,并提供了相应例程。我对应该例程做了一个简化版的程序,测试时却发现未能如预期。
在主线程中阻塞了SIGUSR1信号。然后创建两个线程thread1,thread2,该两线程应继承主线程的线程屏蔽,即对SIGUSR1信号是阻塞的。在thread1中,取消了对SIGUSR1信号的阻塞,按预期,thread1应是唯一对SIGUSR1信号非阻塞的线程,该信号将由thread1来处理。
但实际上,我利用kill -USR1 pid 向进程发送信号时,却无任何响应,所有线程都没有捕捉到该信号!如果在主线程中未阻塞信号,则发送到进程的信号都由主线程捕捉处理。
系统:red linux 9.0
请教高手!