我创建了一个preforking Web服务器,它创建服务器套接字,绑定它,监听地址和端口,它预先分配了指定数量的工作者(子进程),这些工作者充当为客户端请求提供服务的工作者。
所有worker都继承父服务器的套接字描述符,并使用它来接受客户端请求。子进程在“parallel”中作为自治进程运行,并使用带有服务器套接字描述符的accept函数。接受客户端请求或操作系统是否为我执行此操作时,是否必须为accept函数使用锁定和解锁机制?这里的想法是多个进程使用公共服务器套接字描述符来接受客户端请求。我是否必须通过互斥机制来保护它以避免竞争条件或死锁?
请注意我在接受函数中使用I / O非阻塞。
我有以下代码:
for(;;) {
int client = accept(...);
if (client < 0) continue;
...
}
我应该使用类似的东西:
for(;;) {
lock();
int client = accept(...);
unlock();
if (client < 0) continue;
...
}
...
答案 0 :(得分:2)
没有。它是一个系统调用,因此是原子的。