在工作线程epolled和配置线程之间交换globale变量

时间:2015-11-20 15:29:01

标签: c linux pthreads mutex epoll

我有一个工作线程在fds和timer上执行epoll_wait,配置存储在全局上下文结构(fdToRead)中。 其他一些线程改变了这种全局结构。

这是原理图原理

工作线程

struct epoll_event ev
while(1){
    epoll_wait(&ev)
    // call to changeFd(path) done here from other thread
    get_mutex
    read(ev.data.fd)//this fd was just closed or re-affect to another file !!!
    ...
    put_mutex
}

来自任何线程的函数调用

changeFd(path){
  get_mutex
  close(fdToRead)
  fdToRead=openSocket(path)
  epoll_add(fdToRead)
  put_mutex
}

问题是如果在epoll_wait之后和get_mutex之前调用changeFd,我会在关闭或重新影响到另一个“内核中的打开文件说明符”的fd上接收事件。

我可以这样做? 哪个模板模式?

是否可以执行类似“epoll_wait中的get_mutex”的操作? 或者,“我可以在epoll_wait调用中阻止”工作线程吗?

1 个答案:

答案 0 :(得分:0)

您可以使用accept()函数,它允许您接受套接字上的新连接,您的代码可能如下所示:

mutex_lock(...)
epoll_wait(...);
accept(...);
mutex_unlock(...);