为什么我不能在线程函数内返回值?

时间:2015-04-14 11:13:42

标签: c multithreading pointers

我正在编写一个函数来创建线程和一个等待的函数。但我得到了一些错误,如

main.c:: warning: assignment makes pointer from integer without a cast 

function.c: In function ‘create_thread’:
function.c:: warning: function returns address of local variable
function.c: In function ‘wait_thread’:
function.c:: warning: passing argument 1 of ‘pthread_join’ makes integer   from pointer without a cast

我的代码在这里:

主要功能:

------------some declartions------
pthread_t **thid =NULL;
thid = create_thread(argv,count);
wait_thread(thid,count);
----------some code-----------------

在我的函数文件中:

pthread_t *  create_thread(char *argv[],
                            int count)
{
 pthread_t thid[count];
 -------some codes-------------
 status = pthread_create(&thid[index],NULL,file_op,(void*)mystruct);
  -------------------------- 
  return thid;

}

 void wait_thread(pthread_t **thid,int count)
 {
   ------some codes-----------
   ret = pthread_join(thid[index],&retval);

 }

指针的声明是否正确?为什么我不能从线程函数返回值?我的代码中有任何问题吗?

1 个答案:

答案 0 :(得分:0)

让我们逐一查看警告:

  

main.c :: warning:赋值来自整数而没有强制转换的指针

您最有可能在此处收到此错误:

thid = create_thread(argv,count);

原因是create_thread返回类型为pthread_t*的参数,而thid的类型为pthread_t**

  

function.c:在函数'create_thread'中:
  function.c :: warning:function返回局部变量的地址

警告说明了一切。 pthread_t thid[count];是一个局部变量。因此,return thid;返回此数组的第一个元素的地址,一旦函数create_thread退出,该地址将无效。

  

function.c:在函数'wait_thread'中:
  function.c :: warning:传递'pthread_join'的参数1使得没有强制转换的指针产生整数

函数pthread_join期望它的第一个类型为pthread_t。您提供类型为thid[index]的参数pthread_t*。这是编译器警告的内容。