当前位置: 技术问答>linux和unix
请教:多线程模式下的信号处理问题
来源: 互联网 发布时间:2015-08-09
本文导语: 根据《实用UNIX编程》一书第十章——线程同步的介绍。在多线程模式下,对于一个发送到进程的信号,将在所有对该信号非阻塞的线程中调度一个来处理该信号,并提供了相应例程。我对应该例程做了一个简化版的...
根据《实用UNIX编程》一书第十章——线程同步的介绍。在多线程模式下,对于一个发送到进程的信号,将在所有对该信号非阻塞的线程中调度一个来处理该信号,并提供了相应例程。我对应该例程做了一个简化版的程序,测试时却发现未能如预期。
在主线程中阻塞了SIGUSR1信号。然后创建两个线程thread1,thread2,该两线程应继承主线程的线程屏蔽,即对SIGUSR1信号是阻塞的。在thread1中,取消了对SIGUSR1信号的阻塞,按预期,thread1应是唯一对SIGUSR1信号非阻塞的线程,该信号将由thread1来处理。
但实际上,我利用kill -USR1 pid 向进程发送信号时,却无任何响应,所有线程都没有捕捉到该信号!如果在主线程中未阻塞信号,则发送到进程的信号都由主线程捕捉处理。
系统:red linux 9.0
请教高手!
在主线程中阻塞了SIGUSR1信号。然后创建两个线程thread1,thread2,该两线程应继承主线程的线程屏蔽,即对SIGUSR1信号是阻塞的。在thread1中,取消了对SIGUSR1信号的阻塞,按预期,thread1应是唯一对SIGUSR1信号非阻塞的线程,该信号将由thread1来处理。
但实际上,我利用kill -USR1 pid 向进程发送信号时,却无任何响应,所有线程都没有捕捉到该信号!如果在主线程中未阻塞信号,则发送到进程的信号都由主线程捕捉处理。
系统:red linux 9.0
请教高手!
|
posix只是定义了一套函数接口标准,并没有什么规定实现细节,比如有些平台是用户级线程有些像linux就是轻量级进程,也叫混合线程,内核要支持轻量级线程必须首先支持内核级线程。
另外这些对不同的信号响应方式是不一样的,比如SIGALRM信号是由调用alarm()的线程响应,
另外这些对不同的信号响应方式是不一样的,比如SIGALRM信号是由调用alarm()的线程响应,
|
pthread库也在不断更新,会尽量朝着posix的方向发展
不必为了一些细节考虑那么多,知道是这么回事就可以了
比这更郁闷的情况我也碰上过
不必为了一些细节考虑那么多,知道是这么回事就可以了
比这更郁闷的情况我也碰上过