0

ランナー関数のmain()で動的に宣言された変数と行列にアクセスするにはどうすればよいですか。それらをrunnerのパラメーターとして渡しましたが、pthread_create関数呼び出しで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 から 1 つの引数のみを取得します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()

于 2013-02-19T16:00:57.213 に答える