在调用另一个函数时传递函数的参数如何传递?

时间:2013-02-19 15:59:05

标签: c multithreading pthreads

如何在runner函数中访问main()中动态声明的变量和矩阵。 我在跑步者中将它们作为参数传递但我不确定它是否正确,因为我必须在pthread_create函数调用中传递跑步者。我是否必须提供我在跑步者中传递的所有参数,同时将其传递给跑步者?我该怎么做?

main() {
        int  m, n, p, q
        int **a, **b, **c;
    ... // dynamically allocating first, second and multiply matrices and taking values    
           // m , n , p , q from user or a file.
    ...
r= pthread_create(threads[i], NULL, runner, (void*) &rows[i]);} // should I specify the                
  // parameters of runner in it ?

 void *runner (int **a, int **b, int **c, int m, int n, int p ) // is it right ???
 { 
        .... using all parameters
pthread_exit(NULL);
  }

1 个答案:

答案 0 :(得分:3)

线程函数只从pthreads获得一个参数,void *

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                      void *(*start_routine) (void *), void *arg);

解决此问题的方法是定义struct,实例化它并使用所需的值初始化它,然后将指向结构的指针传递给pthread_create()

此指针是上述原型中的void *arg。手册页说:

  

新线程通过调用start_routine()开始执行; arg作为传递          start_routine()的唯一论点。