Joinable ve Detachable Thread Türleri

Thread kullanılan bir uygulamada main() fonksiyonundan return edilirse, tüm thread'ler de sonlandırılır ve kullanılan tüm kaynaklar sisteme geri verilir.

Aynı şekilde herhangi bir thread içerisinden exit() benzeri bir komutla çıkış yapılması halinde gene tüm thread'ler sonlandırılacaktır.

pthread_join fonksiyonu ile, bir thread'in sonlanmasını bekleyebiliriz. Bu fonksiyonun kullanıldığı thread, sonlanması beklenen thread sonlanana kadar bloklanacaktır.

Normal (joinable) thread'ler, sonlanmış olsa dahi pthread_join ile join işlemine tabi tutulmazlar ise, CPU tarafından tekrar schedule edilmeseler de sistemden kullandığı kaynaklar geri verilmez

Detachable Thread

Bazen pthread_join ile join işlemi yapmanın anlamlı olmadığı, thread'in ne zaman sonlanacağının öngörülemediği durumlar olabilir.

Bu durumda thread return ettiği noktada tüm kaynakların sisteme otomatik olarak geri verilmesini sağlayabiliriz.

Bunu sağlamak için ise, ilgili thread'leri, DETACHED durumu ile başlatmamız gerekmektedir.

Bir thread başlatılırken thread attribute değerleri üzerinden veya pthread_detach fonksiyonu ile DETACH durumu belirtiebilir:

int pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
int pthread_detach(pthread_t thread);

pthread_join Örneği

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>


void *worker(void *data)
{
        char *name = (char*)data;
        for (int i=0; i<120; i++) {
                usleep(50000);
                printf("Hello from thread %s\n", name);
        }
        printf("Thread %s done...\n", name);
        return NULL;
}

int main(void) {
        pthread_t th1, th2;
        pthread_create(&th1, NULL, worker, "A");
        pthread_create(&th2, NULL, worker, "B");
        sleep(5);
        printf("Exiting from main program\n");
        pthread_join(th1, NULL);
        pthread_join(th2, NULL);
        return 0;
}

results matching ""

    No results matching ""