use*_*987 1 c c++ linux multithreading pthreads
我想我面临种族问题,但不确定.以下是我的代码.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我发送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);
}
Run Code Online (Sandbox Code Playgroud)
在这里,我收到线程参数并对其进行类型转换.当我打印(或使用)其值时,它大部分时间都会给出发送到先前线程的值(相同的线程函数).我在网上搜索,有人认为这是因为竞争条件.
当我发送值而不是地址作为参数时,它工作正常.我正在访问具有不同值的相同地址,为什么它可能是竞争条件.
提前致谢.
@Edit:创建int newsocket_fd; 在循环中.
归档时间: |
|
查看次数: |
186 次 |
最近记录: |