关键流程说明:
1. 信号发送阶段(蓝色区域)
- ’E’信号:当房主退出时,房间进程通过管道发送’E’字符
- ’Q’信号:当普通用户退出时,房间进程发送’Q’字符
2. 信号处理阶段(主进程)
3. 状态更新细节
对于’E’信号处理(绿色区域):
// main.cpp 片段
if (rc == 'E') {
pthread_mutex_lock(&room->lock);
room->pptr[i].child_status = 0; // 状态:0=空闲
room->navail++; // 可用房间数+1
pthread_mutex_unlock(&room->lock);
printf("room %d is now free\n", room->pptr[i].child_pid);
}
对于’Q’信号处理(橙色区域):
// main.cpp 片段
else if (rc == 'Q') {
pthread_mutex_lock(&room->lock);
room->pptr[i].total--; // 房间用户数-1
pthread_mutex_unlock(&room->lock);
printf("user quit room %d\n", room->pptr[i].child_pid);
}
通信通道示意图
技术实现要点
-
管道通信机制:
// 房间进程发送信号 void send_signal(int pipefd, char cmd) { char buf[1] = {cmd}; writen(pipefd, buf, 1); } // 主进程接收信号 char receive_signal(int pipefd) { char buf[1]; Readn(pipefd, buf, 1); return buf[0]; } -
线程安全更新:
void update_room_status(int index, int status) { pthread_mutex_lock(&room->lock); room->pptr[index].child_status = status; if (status == 0) room->navail++; pthread_mutex_unlock(&room->lock); } -
状态同步保障:
这种设计确保了在多进程环境下状态更新的原子性和一致性,是高性能服务器程序的核心模式。
1478

被折叠的 条评论
为什么被折叠?



