小编use*_*987的帖子

它如何成为一种竞争条件.或者我的代码有问题

我想我面临种族问题,但不确定.以下是我的代码.

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; 在循环中.

c c++ linux multithreading pthreads

1
推荐指数
1
解决办法
186
查看次数

将C++首先转换为汇编

我有困惑.我是C++开发人员,并多次听说我的源代码将首先转换为程序集,然后程序集将转换为机器代码.但是在汇编语言的一个视频教程中,教师清楚地说,C/C++代码直接转换为机器代码.(当然会有链接和加载).

我见过像这样的链接, C++代码是否编译成汇编代码?

我仍然无法澄清我的怀疑.

如果以防万一,C++没有首先转换为汇编,那么反汇编器如何从二进制生成汇编代码.

c++ compiler-construction assembly standards

1
推荐指数
1
解决办法
2028
查看次数