Manual说,setitimer在整个PROCESS中共享,SIGPROF发送到PROCESS而不是线程.
但是当我在多线程PROCESS中创建定时器时,除非我为PROCESS中的每个线程创建独立的堆栈以处理signo,否则我将在sig处理程序中遇到一些非常严重的错误.通过一些调试,我确认必须重新输入堆栈(唯一的堆栈大小写).
所以现在我怀疑SIGPROF可能会同时发送到多线程?谢谢!
我不明白你的问题的细节,但一般情况是:
可以为整个进程(例如,当使用kill(2)发送时)或为特定线程(例如,由于执行而生成的某些信号,例如SIGSEGV和SIGFPE)生成(并因此挂起)信号特定的机器语言指令是线程定向的,就像使用 pthread_kill(3)) 针对特定线程的信号一样。 进程控制的信号可以被传递到当前没有阻止该信号的任何一个线程。如果多个线程的信号未被阻塞,则内核会选择任意一个线程来向其传递信号。
您可以使用pthread_sigmask阻止特定线程的信号,并通过消除将其定向到您想要处理它的线程。
| 归档时间: |
|
| 查看次数: |
1719 次 |
| 最近记录: |