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.