每个线程传递一个局部变量会影响到其他线程的变量值?百思不得其解
计划做一个多线程的TCP服务器,初步进行一些疑问的验证,现在碰到一个想了很久没想通的问题!
思路很简单,为每个接入的socket开辟一个线程,然后进行收发消息:
server端部分代码
while (1)
{
int client_sockd = 0;
if ((client_sockd=accept(server_sockd, (SKADDR *) &client_addr,
&sock_len))
{
perror("accept error ");
close(client_sockd);
sleep(10);
continue ;
}
printf("[%d]CIP:[%s],PORT[%d]\n", ++count, inet_ntoa(client_addr.sin_addr),
ntohs(client_addr.sin_port));
// 给消息结构体赋值,从这里启动消息处理线程
pthread_t tid;
RMSG rmsg;
memset(&rmsg, 0, sizeof (rmsg));
rmsg.cli_sockd = client_sockd;
memcpy(&(rmsg.cli_addr), &client_addr, sizeof (client_addr));
pthread_create(&tid, NULL, server_handle, (void *) &rmsg);
}
rmsg是一个消息结构体,包含了一个socket、客户端地址、消息(消息暂时没用到)
然后进入线程,死循环读数据,客户端关闭连接以后线程就会退出。
thread部分代码
void *server_handle(void *args)
{
RMSG *rmsg = (RMSG *) args;
unsigned long tid = pthread_self();
printf("TID[%lu] : SOCK[%d], CIP[%s], PORT[%d]\n", \
tid, \
rmsg->cli_sockd, \
inet_ntoa(rmsg->cli_addr.sin_addr), \
ntohs(rmsg->cli_addr.sin_port));
while(1)
{
char buf[BUFFER_SIZE] = "";
if (recv(rmsg->cli_sockd, buf, BUFFER_SIZE, 0) <= 0)
{
perror("recv error/socket closed ");
break;
}
printf("TID[%lu] : MESSAGE[%s]\n", tid, buf);
}
close(rmsg->cli_sockd);
printf("SOCK[%d] closed....\n", rmsg->cli_sockd); //