私は教授の講義ノートでレビューをしています。私は同時セッションセクションに達したときにこの質問を得ました:
スライドで、教授はpthreadを使用する2つの例を挙げました(1つは良い例、もう1つは悪い例です)。しかし、なぜ彼らの間に違いがあるのか分かりません。悪いものは最初のものとは異なり、そしてなぜ、なぜ私に説明してくださいpthreadとのCプログラムの同時実行
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *get_rand_num(void *args) {
int *nump = malloc(sizeof(int));
srand(pthread_self());
*nump = rand();
return nump;
}
int main() {
pthread_t tid;
void *ptr = NULL;
pthread_create(&tid, NULL, get_rand_num, NULL);
pthread_join(tid, &ptr);
printf("Random number: %d\n", * (int *) ptr);
return 0;
}
と悪い例が
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *get_rand_num(void *args) {
int num;
srand(pthread_self());
num = rand();
return #
}
int main() {
pthread_t tid;
void *ptr = NULL;
pthread_create(&tid, NULL, get_rand_num, NULL);
pthread_join(tid, &ptr);
printf("Random number: %d\n", * (int *) ptr);
return 0;
}
で誰もがこれらの2つの例を理解することができます:ここ
は良い例ですそれは良くない?
アラン
ありがとう、私はそれを持っていると思います!ところで、最初の例では、割り当てられたメモリを解放するために行を追加することで改善すべきという意味ですか? 'free(nump)'のように?プログラムにこの行をどこに置くべきだと思いますか? 'pthread_join()'の前に置くべきですか? –
技術的には、プログラムが短命でメモリがプログラム終了時にOSによって自動的に再利用されるため、メモリリークはなく、悪い習慣です。 – Ioan
@AllanJiang:いいえ、絶対にありません。単純なルール、 'malloc'に従ってください。メモリを使い、終了したら' free'を実行してください。 'printf'呼び出しの後に置きます。 – thiton