linux C socket编程多线程问题
是1个服务器对多个客户端,代码框架基本就下面这样子socketbindlistenwhile(1){client_socket_fd=accept(server_sock...
是1个服务器对多个客户端,代码框架基本就下面这样子
socket
bind
listen
while(1){
client_socket_fd = accept(server_socket_fd,(struct sockaddr *)&client_addr,&client_sockaddr_size)
pthread_create(.........) //每个线程内完成一个客户端的数据的收发
现在问题是线程中会调用到client_socket_fd这个变量,但是client_socket_fd会变化的,导致线程的数据都是乱的,怎么解决 展开
socket
bind
listen
while(1){
client_socket_fd = accept(server_socket_fd,(struct sockaddr *)&client_addr,&client_sockaddr_size)
pthread_create(.........) //每个线程内完成一个客户端的数据的收发
现在问题是线程中会调用到client_socket_fd这个变量,但是client_socket_fd会变化的,导致线程的数据都是乱的,怎么解决 展开
2个回答
展开全部
在线程函数内定义同样类型的局部变量,创建线程时将client_socket_fd
值传递给该局部变量,以后在该线程中只使用线程函数中的局部变量就可以了。
例如:
pthread_create(&iThreadId, &attr, ThreadProc, client_socket_fd);
线程函数:(其中使用fd)
void *ThreadProc(void *lpVoid)
{
SOCKET *fd = (SOCKET)lpVoid;
... ...
}
值传递给该局部变量,以后在该线程中只使用线程函数中的局部变量就可以了。
例如:
pthread_create(&iThreadId, &attr, ThreadProc, client_socket_fd);
线程函数:(其中使用fd)
void *ThreadProc(void *lpVoid)
{
SOCKET *fd = (SOCKET)lpVoid;
... ...
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询