c - 多线程 http 服务器中的 pthread_create
问题描述
假设服务器以下列方式处理客户端:
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 仍然具有与前一次迭代相同的地址。
解决方案
是的。这意味着下一个线程可以 在前一个线程有机会获取accept()
值之前覆盖该值,所以这不是一个好的设计。
推荐阅读
- function - 在 Visual Studio 的下拉列表中不按字母顺序列出成员函数
- flutter - setState 来自外部的 showDialog()
- php - Laravel 迁移回滚
- android - 如何使用 SQLite 内容提供程序和 itemOnClickListener 删除 ListView 中的单个项目
- google-chrome - 谷歌浏览器:避免关闭固定标签
- jquery - django.jQuery 不是函数
- flutter - 如何在 Flutter Qibla 中找到 Qibla 角度
- ios - Swift:警告说当用户访问不允许的 URL 时它被阻止
- java - 许多无用的连接与 mysql-connector-java-5.1.32
- hazelcast - 无法从共享对象 hazelcast mancenter 映射段