setitimer的ITIMER_PROF(SIGPROF)是否发送到Multithread,NPTL和Linux(2.6.21.7)中的每个线程?

orz*_*orz 5 c linux pthreads

Manual说,setitimer在整个PROCESS中共享,SIGPROF发送到PROCESS而不是线程.

但是当我在多线程PROCESS中创建定时器时,除非我为PROCESS中的每个线程创建独立的堆栈以处理signo,否则我将在sig处理程序中遇到一些非常严重的错误.通过一些调试,我确认必须重新输入堆栈(唯一的堆栈大小写).

所以现在我怀疑SIGPROF可能会同时发送到多线程?谢谢!

Duc*_*uck 3

我不明白你的问题的细节,但一般情况是:

可以为整个进程(例如,当使用kill(2)发送时)或为特定线程(例如,由于执行而生成的某些信号,例如SIGSEGV和SIGFPE)生成(并因此挂起)信号特定的机器语言指令是线程定向的,就像使用 pthread_kill(3)) 针对特定线程的信号一样。 进程控制的信号可以被传递到当前没有阻止该信号的任何一个线程。如果多个线程的信号未被阻塞,则内核会选择任意一个线程来向其传递信号。

人(7)信号

您可以使用pthread_sigmask阻止特定线程的信号,并通过消除将其定向到您想要处理它的线程。