【发布时间】:2013-06-19 09:45:04
【问题描述】:
我认为我面临着比赛条件的问题,但不确定。 以下是我的代码。
while(1)
{
int newsocket_fd; = accept(socket_fd,(struct sockaddr *) &client_addr, &client_len);
if (newsocket_fd < 0)
{
perror("Error on accept");
}
else
{
pthread_create( &threadNewClient, NULL, NewClient, (void *)&newsocket_fd);
}
}
我将 int 变量 (newsocket_fd) 的地址作为线程参数发送。
void* NewClient(void * thread_args)
{
int client_socket = *(int*)thread_args;
char buffer[256];
int n;
stringstream userInput,responseString;
printf(KBLU "Client conneted %d\n",client_socket);
}
我在这里接收线程参数并对其进行类型转换。当我打印(或使用)它的值时,它大部分时间都会给出发送到先前线程(相同线程函数)的值。我在网上搜索,有人认为这是因为比赛条件。
当我发送值而不是地址作为参数时,它工作正常。我正在访问具有不同值的相同地址,它怎么可能是竞争条件。
提前致谢。
@Edit: 创建 int newsocket_fd;在while循环中。
【问题讨论】:
标签: c++ c linux multithreading pthreads