我有一台服务器使用BIO_do_accept的阻塞实现接受多个客户端,每次客户端连接时,BIO_do_accept返回,我创建一个新线程来处理连接,并在主线程中再次调用BIO_do_accept以接受更多连接
但是,我需要能够停止被BIO_do_accept阻止的线程。我想到的唯一解决方案是使用非阻塞实现,当函数返回时,检查一个全局变量以确定线程是否需要退出,如果是空闲内存并使用pthread_exit,如果不是,用pthread_yield运行另一个线程。
我认为我不能使用信号因为我需要释放BIO对象,所以从信号处理程序中释放内存和pthread_exit都可能不好。
有没有人知道更好的解决方案,或者全局变量/ polling / pthread_exit的组合真的是最好的解决方案吗?