2

我创建了一个预分叉 Web 服务器,它创建服务器套接字、绑定它、侦听地址和端口,并预分叉指定数量的工作人员(子进程),这些工作人员充当服务客户端请求的工作人员。

所有工作人员都继承父服务器的套接字描述符并使用它来接受客户端请求。子进程作为“并行”的自治进程运行,并使用带有服务器套接字描述符的接受函数。在接受客户端请求时,我是否必须对接受功能使用锁定和解锁机制,或者操作系统会为我这样做?这里的想法是多个进程使用公共服务器套接字描述符来接受客户端请求。我是否必须使用互斥机制来保护它以避免竞争条件或死锁?

请考虑我在接受函数中使用 I/O 非阻塞。

我有以下代码:

for(;;) {
    int client = accept(...);
    if (client < 0) continue;
    ...
}

我应该使用类似的东西:

for(;;) {
    lock();
    int client = accept(...);
    unlock();
    if (client < 0) continue;
    ...
}

??

4

1 回答 1

3

不,这是一个系统调用,因此是原子的。

于 2014-06-25T01:32:23.720 回答