1

1-只能向进程发送unix信号,还是也可以向线程发送信号?

2-是否可以将线程的 tid 发送到内核模块?如何?

3-内核模块通过什么方式可以找到线程的tid,发送信号?

4-线程将有一个处理程序,将在每个信号上运行。如果每个处理程序对应一个信号,是否有任何竞争条件?可以向所有线程传达信号吗?如果所有人同时访问处理程序会发生什么?

4

1 回答 1

1

Ad.1 你想从哪里发送信号?您可以使用kill()将信号发送到进程并将pthread_kill()其发送到线程(但只能从创建线程的进程)。

广告 3。在处理一个信号时,其他待处理的信号将排队,因此不会出现竞争条件。但是您需要将处理程序中使用的非局部变量设置为原子(因此当中断来时设置此变量不会被中断)并检查哪些函数是处理程序安全的。

关于信号和线程 - 信号通常直接来自进程(只有pthread_kill您可以从用户空间向线程发送信号)。如果您有多线程进程并且没有线程阻塞此信号,则信号将进入随机线程(信号到来时正在运行的线程)。如果您阻塞除一个以外的所有线程,则信号将仅到达该线程。

于 2013-09-17T13:07:13.637 回答