pthread_join
- C kursu
- İleri seviye
- Ders 20/83
- 5 dk
pthread_join ile iş parçacığını beklemeyi öğrenirsin.
pthread_join ayrıntısı
pthread_join(tid, &result), iş parçacığının döndürdüğü değeri alır. İşlev return ile bir işaretçi döndürmüşse, bu değer result'a yazılır.
İş parçacığı işlevi void * döndürür. Örneğin return r; ile bir int * döndürüp, ebeveynde int *result; pthread_join(tid, (void **)&result); ile alırsın. Daha sonra *result ile değere ulaşırsın. Bu, iş parçacığı sonucunu geri getirmenin standart yoludur.
Ayrılmış iş parçacığı
Bazen bir iş parçacığını beklemeden bağımsız çalışmaya bırakırsın. pthread_detach(tid) ile iş parçacığını ayrılır; bittiğinde kaynakları otomatik serbest kalır.
Ayrılmış iş parçacığı join edilemez. Bir iş parçacığı ya join edilir ya detach edilir; ikisi birden olmaz. Arka plan günlükleyici veya izleyici iş parçacıkları genelde ayrılır. Ana akış onlarla ilgilenmez ve bitişlerini beklemez.
Uygulama İş parçacığı sonucunu al
void *worker(void *arg) yaz; int *r = malloc(sizeof(int)); *r = 99; return r;. pthread_create(&tid, NULL, worker, NULL); ile oluştur. int *result; pthread_join(tid, (void **)&result); ile al. printf("sonuç=%d\n", *result); ve free(result);.
Başlangıç kodu
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
// worker işlevini yaz (malloc ile değer döndür)
// pthread_create ve pthread_join ile al
// result'u yazdır
int main(void) {
return 0;
}Örnek çözüm
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
void *worker(void *arg) {
int *r = malloc(sizeof(int));
*r = 99;
return r;
}
int main(void) {
pthread_t tid;
pthread_create(&tid, NULL, worker, NULL);
int *result;
pthread_join(tid, (void **)&result);
printf("sonuç=%d\n", *result);
free(result);
return 0;
}Beklenen çıktı
sonuç=99
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 join kavramlarını eşle
| Kavram | Anlamı |
|---|---|
pthread_join |
Dönüş değeri alır |
pthread_detach |
Bağımsız bırakır |
void ** |
İşaretçi işaretçisi |
return |
İşlevi bitirir |
2 pthread_join'in ikinci parametresi ne alır?
- İş parçacığı kimliği
- Öznitelikler
- Bekleme süresi
- Dönüş değeri işaretçisi Doğru cevap
Açıklama: İkinci parametre dönüş değerini alan işaretçidir.
3 join ile değer al
pthread_join(tid, (void **)&____);
pthread_join(tid, (void **)&result);
Açıklama: result işaretçisine dönüş değeri yazılır.