13 Ekim 2016 Perşembe

pthread_join metodu

Giriş
pthread_create metodunun ikinci parametresine NULL geçersek joinable bir thread yaratırız.

1. parametre thread_t yapısı
Thread'i beklemek için pthread_join() metodunu çağırmak gerekir. Klasik kullanımı şöyledir.
pthread_join(t, NULL);
2. ikinci parametre
Thread metodu bir sonuç dönerse kullanılır. Şöyle yaparız.
struct threadresult {
  int sum;
  int product;
};

void* myThread (void* args) {
  ...
  struct threadresult* result = malloc(sizeof(*result));
  result->sum = ...;
  result->product = ...;

  return result;
}

pthread_t t = ...;
struct threadresult* result;
pthread_join (t, &result);
Thread bir sonuç dönmüyorsa zaten null_ptr döndüğü için bizim değişkenimiz de null değeri alır.

3. çağrı sonucu
Şöyle de kullanabiliriz. Çağrı başarılı ise 0 döner.
void *status;
int rc = pthread_join(t, &status);
if (rc) {
  printf("ERROR; return code from pthread_join() is %d\n", rc);
}
Eğer joinable bir thread yaratıp dönüşünü beklemezsek, thread'in çıkış kodu bir yerde saklanacağı için kaynağı israf etmiş oluruz.

Eğer thread iptal edilirse, pthread_join metodu PTHREAD_CANCELLED döner.

Hiç yorum yok:

Yorum Gönder