【发布时间】:2020-12-11 08:05:26
【问题描述】:
假设服务器以如下方式处理客户端:
void* handle_request(void* client_sck);
int client_sck;
while((client_sck = accept(...)) != -1)
{
/*
.
.
.
*/
pthread_create(&thr, 0, handle_request, (void*)&client_sck);
}
是否可以肯定地说,在每次循环迭代中,传递给pthread_create 的最后一个参数将在线程之间共享?这意味着第二次,client_sck 仍然具有与上一次迭代相同的地址。
【问题讨论】:
-
你引用的是同一个变量,为什么地址会改变?但是,这很可能不是您想要的。
-
您知道 apache httpd(和其他)是开源的吧?你可以去看看。
-
地址不会改变,但解引用的值会不同。如果第一次创建的线程还没有取消引用它,那将是一个问题:(
-
因此,我们可以得出结论,这不是处理客户端连接的最聪明的方法,因为地址本质上是相同的,但每次迭代都会覆盖该值。在调用
pthread_create之前,malloc是否为每次迭代添加一个新参数? @Nic3500 我很好奇 http 服务器的一个更简单的例子,而不是一个成熟的项目。主要是由于pthread_create的性质