信号可以被进程用来相互通信。线程同进程一样也可以接收和处理信号,信号也是一种线程间同步的手段。

信号(SIGINT 和 SIGNO)与任何线程都是异步的,也就是说信号达到线程的时间是不确定的。如果有多个线程可以接收

异步信号,则只有一个被选中。如果并发的多个同样的信号被送到一个进程,每一个将被不同的线程处理。如果所有的

线程都屏蔽该信号,则这些信号将被挂起,直到有信号解除屏蔽来处理他们。

处理异步信号的3个函数:

1、int pthread_kill(pthread_t thread, int sig);

向特定的线程发送sig信号

2、int sigwait(const sigset_t *set, int *sig)

阻塞线程,等待set中指定的信号之一到达,并将到达的信号存入sig中

3、int pthread_sigmask (int how,const sigset_t *set,sigset_t *oset)

设置线程的信号屏蔽码,但对不允许屏蔽的信号Cancel信号和不允许响应的信号Restart信号进行了保护。

 

posted on 2017-03-17 16:44  邶风  阅读(223)  评论(0编辑  收藏  举报