2017-02-26 15 views
1

これは私のコードの略語です。私は "initializeGrid()"が適切に動作することを明確にする必要があります。簡潔にするために、私はそれを含めませんでした。 argsの値を表示するのに "threadFunction()"を取得しようとしていますが、動作しません。助けてください!スレッドが正しく生成されないのはなぜですか? C

#include <pthread.h> 
#include <math.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <memory.h> 

int gridSize = 12; 

typedef struct threadParameter { 
    float * grid; 
    int top; 
    int bot; 
}threadParameter; 

void* threadFunction(void* args) { 

    threadParameter *param = (threadParameter*) args; 
    printf("%d, %d", param->bot, param->top); 
    return 0; 

} 

int main(int argc, char *argv[]) { 

    int numProcs = 4; 

    pthread_t * threadsArr = malloc(numProcs * sizeof(pthread_t)); 

    float mainGrid[gridSize][gridSize]; 
    memset(mainGrid, 0, gridSize*gridSize * sizeof(float)); 
    initializeGrid(1.0, 2.0, 3.0, 4.0, mainGrid); 

    threadParameter t = {&mainGrid[0][0], 0, gridSize}; 
    int ret = pthread_create(&threadsArr[0], 0, threadFunction, (void*)&t); 

} 

答えて

2

main()関数は、pthread_create()を呼び出した直後に戻ります。

main()が返されると、プロセスは終了し、生成されたすべてのスレッドとともに終了します。

pthread_join()呼び出しを追加して、スレッドが終了するのを待つ必要があります。 pthread_join() POSIX standardパー:ターゲットthreadはこのような

を終了するまで

pthread_join()関数は呼び出し スレッドの実行を中止しなければならない:

int main(int argc, char *argv[]) { 

    int numProcs = 4; 

    pthread_t * threadsArr = malloc(numProcs * sizeof(pthread_t)); 

    float mainGrid[gridSize][gridSize]; 
    memset(mainGrid, 0, gridSize*gridSize * sizeof(float)); 
    initializeGrid(1.0, 2.0, 3.0, 4.0, mainGrid); 

    threadParameter t = {&mainGrid[0][0], 0, gridSize}; 
    int ret = pthread_create(&threadsArr[0], 0, threadFunction, (void*)&t); 

    pthread_join(threadsArr[0], NULL); 
} 
+0

、非常に多くの@Andrewヘンレをありがとう!それはまさに問題です。迅速で詳細な対応をありがとう! – SupposedlySleeping

+1

この問題を解決する別の方法は、 'main'からの暗黙的な戻りの代わりに' pthread_exit'を行うことです。これにより、プロセスが生き残り、他のすべてのスレッドが選択したとおりに終了します。 –

関連する問題