Cal*_*all 12 c sockets pthreads threadpool
我正在用C编写一个简单的网络服务器,用于我正在做的课程.一个要求是我们实现一个线程池来处理使用pthreads的连接.
我知道我将如何大致这样做(在主线程中调用accept并将文件描述符传递给freee线程),但是我的朋友提出了一种替代方法,而不是我想到的方法:在前面创建我的所有线程,并让他们全部循环接听电话.接受的想法是阻止所有空闲线程,当连接进入时,只给出一个文件描述符.然后当一个给定的线程完成一个连接时,它会循环回来并阻塞一个调用再次接受.使用accept()作为信号量的调用.这样可以简化其实现的实现,因为您不需要跟踪哪些线程正忙,哪些线程已准备好进行连接.理论上它也可能是较低的延迟,因为线程可以立即开始执行.
我的问题是,这样安全吗?我打算实施它并尝试一下,但我还没准备好,我很想知道答案.我在谷歌和这里搜索stackoverflow,但找不到任何人这样做.接受线程安全吗?我假设这种方法会有更多的开销,因为你一直在运行所有的线程,这两种方法只是简单的内存/延迟权衡吗?
编辑:我不确定这应该是社区维基,如果它应该是道歉,我找不到按钮:P