当前位置: 技术问答>linux和unix
linux下面如何让线程等待多个事件?
来源: 互联网 发布时间:2016-07-26
本文导语: rt | 使用I/O多路转接,select/poll/epoll。 | 首先,你所说的事件是什么?是signal还是condition 如果是signal,因为线程有别于进程,所以可以这样做。在线程内设置信号屏蔽位,将期...
rt
|
使用I/O多路转接,select/poll/epoll。
|
首先,你所说的事件是什么?是signal还是condition
如果是signal,因为线程有别于进程,所以可以这样做。在线程内设置信号屏蔽位,将期望处理的信号位放
开,其余的block,然后再关联信号处理程序。
如果是condition,那就在线程里需要这个condition的时候直接pthread_cond_wait,等到condition满足的
时候再继续向下执行
而你说的多个事件,和以上的处理方法差不多,但是还是要先去分是哪种。这两种可是完全不同的机制
如果是signal,因为线程有别于进程,所以可以这样做。在线程内设置信号屏蔽位,将期望处理的信号位放
开,其余的block,然后再关联信号处理程序。
如果是condition,那就在线程里需要这个condition的时候直接pthread_cond_wait,等到condition满足的
时候再继续向下执行
而你说的多个事件,和以上的处理方法差不多,但是还是要先去分是哪种。这两种可是完全不同的机制
|
看你对事件的定义是什么?
1、如果是定时、网络或文件I/O事件,可以通过select/poll/epoll来解决。
2、如果是异步磁盘I/O事件,可以通过AIO来解决。
3、如果是信号和条件,可以通过设置信号处理函数和pthread_cond_wait来处理。
1、如果是定时、网络或文件I/O事件,可以通过select/poll/epoll来解决。
2、如果是异步磁盘I/O事件,可以通过AIO来解决。
3、如果是信号和条件,可以通过设置信号处理函数和pthread_cond_wait来处理。