首先让我们思考一个问题,当一个进程正在阻塞在epoll_wait的时候,另一个线程调用epoll_ctl时会发生什么呢,这个动作安全吗?
测试当epoll_wait期间另一个线程执行epoll_ctl是否安全
其实这种动作是安全的(测试平台为linux,内核为4.4版本),先看一下man里面的描述,可见是安全的。
1.下面让我们来测试一下,首先把fd2加入监听,然后再调用epoll_wait,在wait期间再另一个线程在调用epoll_ctl把fd1加入监听,然后再往fd1里写入数据,可见epoll_wait返回了,证明fd1加入之间没有时间发生时,在wait期间把它加入监听是安全的。代码见下,有点乱,大家凑合着看吧。。。。