0

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

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);
  }
4

1 回答 1

3

线程函数仅从 pthreads 获取单个参数,a void *

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

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

这个指针void *arg在上面的原型中。手册页说:

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

于 2013-02-19T16:00:57.213 回答