有人可以告诉我从Signal Handler调用syscall(SYS_gettid)会有什么不利影响吗? 我知道它不在安全函数列表中从信号处理程序调用,但我想知道背后的原因吗?
答案 0 :(得分:1)
我很确定这与信号处理程序方法是可重入的有关。假设发送了一个信号,你的处理程序抓取信号并开始处理。处理时,另一个信号可能由并发程序发送,你的处理程序再次抓取该信号,并开始处理它。
根据调度的工作方式,相同的代码块(信号处理程序)可能在其自己的执行期间执行 。问题是它使用相同的指针和变量,因此它可能会破坏自身,特别是因为gettid()返回当前线程的ID。在这种情况下,这是当前的主题?