1-只能向进程发送unix信号,还是也可以向线程发送信号?
2-是否可以将线程的 tid 发送到内核模块?如何?
3-内核模块通过什么方式可以找到线程的tid,发送信号?
4-线程将有一个处理程序,将在每个信号上运行。如果每个处理程序对应一个信号,是否有任何竞争条件?可以向所有线程传达信号吗?如果所有人同时访问处理程序会发生什么?
1-只能向进程发送unix信号,还是也可以向线程发送信号?
2-是否可以将线程的 tid 发送到内核模块?如何?
3-内核模块通过什么方式可以找到线程的tid,发送信号?
4-线程将有一个处理程序,将在每个信号上运行。如果每个处理程序对应一个信号,是否有任何竞争条件?可以向所有线程传达信号吗?如果所有人同时访问处理程序会发生什么?
Ad.1 你想从哪里发送信号?您可以使用kill()
将信号发送到进程并将pthread_kill()
其发送到线程(但只能从创建线程的进程)。
广告 3。在处理一个信号时,其他待处理的信号将排队,因此不会出现竞争条件。但是您需要将处理程序中使用的非局部变量设置为原子(因此当中断来时设置此变量不会被中断)并检查哪些函数是处理程序安全的。
关于信号和线程 - 信号通常直接来自进程(只有pthread_kill
您可以从用户空间向线程发送信号)。如果您有多线程进程并且没有线程阻塞此信号,则信号将进入随机线程(信号到来时正在运行的线程)。如果您阻塞除一个以外的所有线程,则信号将仅到达该线程。