Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asynchronous 无法加入ev循环线程,因为它挂起在epoll_wait()中_Asynchronous_Redis_Epoll_Libev_Hiredis - Fatal编程技术网

Asynchronous 无法加入ev循环线程,因为它挂起在epoll_wait()中

Asynchronous 无法加入ev循环线程,因为它挂起在epoll_wait()中,asynchronous,redis,epoll,libev,hiredis,Asynchronous,Redis,Epoll,Libev,Hiredis,我正在使用libev的异步hiredis。mLoopThread在这里用于ev循环线程,基本上mLoopThread调用ev_loop()。当主线程尝试销毁异步hiredis实例时,它调用ev_unloop以尝试使ev_loop()退出。代码如下所示。但这是行不通的。回溯显示mLoopThread挂起在epoll_wait()中,主线程挂起在mLoopThread->join()中。如何退出ev循环线程?谢谢 ~async_redis() { ev_unloop(mLoop, EVBRE

我正在使用libev的异步hiredis。mLoopThread在这里用于ev循环线程,基本上mLoopThread调用ev_loop()。当主线程尝试销毁异步hiredis实例时,它调用ev_unloop以尝试使ev_loop()退出。代码如下所示。但这是行不通的。回溯显示mLoopThread挂起在epoll_wait()中,主线程挂起在mLoopThread->join()中。如何退出ev循环线程?谢谢

~async_redis() {
    ev_unloop(mLoop, EVBREAK_ALL);
    if (mLoopThread && mLoopThread->joinable()) {
        mLoopThread->join();
    }
}

这很难回答,因为您只提供了4行代码,但在我看来,您将ev_unlop从事件循环中调用,这几乎是无用的

在这里,您调用ev_unlop,然后尝试加入线程,因此我的理解是您在主线程中,希望通知事件循环停止,并等待事件循环线程停止。国际海事组织这样做的正确方法是:

  • 将ev_异步处理程序添加到事件循环

  • 与此异步处理程序关联的回调应该调用ev_unlop-它将从事件循环线程在事件循环内执行

  • 在主线程中,通知ev_异步处理程序事件循环(线程安全操作),然后可以加入事件循环线程

这通常是我使用ev_unloop的方式