如何向c中的线程发送信号?

时间:2013-09-05 20:08:36

标签: c linux multithreading signals driver

1-发送unix信号只能用于进程,或者也可以向线程发送信号?

2 - 是否可以将线程的tid发送到内核模块?怎么样?

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

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

1 个答案:

答案 0 :(得分:1)

Ad.1您想从哪里发送信号?您可以使用kill()发送信号进行处理,pthread_kill()将信号发送给线程(但只能从创建线程的进程发送)。

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

关于信号和线程 - 信号通常直接进入进程(只有pthread_kill才能从用户空间向线程发送信号)。如果你有多线程进程并且没有任何线程阻止此信号,则信号将进入随机线程(当信号到来时正在运行的线程)。如果你阻止除了一个之外的所有线程,那么信号将仅来到这一个线程。