CodeBlanks Logo Icon CodeBlanks

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

main.c
#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

main.c
#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

Soru
pthread_join(tid, (void **)&____);
Cevap
pthread_join(tid, (void **)&result);

Açıklama: result işaretçisine dönüş değeri yazılır.

İleri seviye bölümündeki tüm dersler