一个常见的错误pthread_create()的参数

LINUX 传递‘pthread_create’的第 3 个参数时在不兼容的指针类型间转换

LINUX SUSE SP4环境gcc编译报标题的警告,执行时报段错误
代码如下
void * xxx(int *xa)
{
...
}
int main(int argc, char* argv[])
{
...
int xxa;
pthread_create(&threadID, NULL, xxx, &xxa);
...
}

请问pthread_create的第3个参数要怎么改才能匹配上xxx函数?


正确的答案:

需要修改的不是pthread_create的第3个参数,而是第3个参数对应的线程函数的函数原型,线程函数的原型是这样的形式:
void *(*start_routine) (void *);
线程函数的参数和返回值都是一个void指针,而你写的线程函数的参数却是一个int指针,把线程函数的参数修改成void *类型就可以了。如果你需要int型,可以这样写(用强制类型转换,因为线程函数的参数是void *,所以这在线程函数内部经常这样用):
void * xxx(void *xa)
{
printf("Thread function argument was %d\n", *(int *)xa);
......
}



你可能感兴趣的:(一个常见的错误pthread_create()的参数)