c语言线程中的变量值,每个线程传接一个局部变量会影响到其他线程的变量值?百思不得其解...

每个线程传递一个局部变量会影响到其他线程的变量值?百思不得其解

计划做一个多线程的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);    // 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值