1

有人能告诉我从 Signal Handler 调用 syscall(SYS_gettid) 会产生什么不利影响吗?我知道它不在从信号处理程序调用的安全函数列表中,但我想知道它背后的原因?

4

1 回答 1

1

我很确定这与可重入的信号处理程序方法有关。假设发送了一个信号,并且您的处理程序获取该信号并开始处理。在处理过程中,并发程序可能会发送另一个信号,并且您的处理程序会再次抓取该信号并开始处理它。

根据调度的结果,同一块代码(信号处理程序)可能会在其自己的执行过程中执行。问题在于它使用相同的指针和变量,因此它可能会损坏自身,特别是因为 gettid() 返回当前线程的 ID。在这种情况下,哪个是当前线程?

于 2012-02-16T20:11:12.067 回答