我正在與我的教授的講義做一個審查。當我到達併發部分時,我得到了這個問題:
在幻燈片中,教授給出了兩個使用pthread的例子(一個是很好的例子,另一個是壞的)。但我不明白爲什麼他們之間有區別。
這裏是很好的例子:C程序併發與pthread
#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;
}
任何人都可以理解這兩個例子,請向我解釋爲什麼壞的是從第一個不同,爲什麼它不好?
謝謝
艾倫
謝謝,我想我明白了!順便說一句,在第一個例子中,你的意思是應該通過添加一行來釋放分配的內存來改進它。如「免費(nump)」?你認爲我應該把這一行放在程序中?我應該把它放在`pthread_join()`之前嗎? – 2011-12-14 18:53:20
從技術上講,由於程序壽命短,OS在程序終止時自動回收內存,因此沒有內存泄漏,只是不好的做法。 – Ioan 2011-12-14 18:54:53