C构造的意义

时间:2015-04-18 13:38:53

标签: c

在下面的代码中,int sid=*(int*)args构造的作用是什么?

void *thread_p(void *args)
{
    int sid=*(int*)args,i,size=0;***This initialisation in the thread function means what?***
    char msg[100];

    while(1)
    {
            for(i=0;i<100;i++)
                msg[i]='\0';

            recv(sid,msg,100,0);
            printf("\nClient:%s",msg);
            printf("\nServer:");
            gets(msg);

            size=strlen(msg);
            send(sid,msg,size,0);
            if((strcmp(msg,"exit"))==0)
            {  
                close(sid);
                exit(1);
            }
    }
}

1 个答案:

答案 0 :(得分:0)

我在这里假设thread_p是一个pthread_create启动例程。这样的启动例程需要接受一个void指针,它在C和C ++中表示指向无类型内存块的指针。现在,除了启动例程之外,pthread_create还接受一个void指针参数,并将其传递给start例程。 pthread_create的调用者可以使用start例程中的代码来协调对pthread_create的调用。因此,如果给pthread_create的启动例程假定void指针指向一个整数,则对pthread_create的调用必须将指向整数的指针作为arg参数传递,以使事物保持同步。这是一种类型不安全的界面。编译器不会帮助您确保它们是同步的,如果它们不同步,您将获得未定义的行为。

你的thread_p函数假设传递给它的arg实际上指向一个整数。它首先将void指针强制转换为整数指针(即(int *)args部分),然后取消引用指针以获取它指向的整数(即*(*)前面的* )参数)。如果pthread_create的调用者传递了thread_p,但是无法将int的地址作为arg参数传递,则代码将具有未定义的行为。