如何在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);
}
答案 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()
的唯一论点。