Thread Oluşturma
Yeni bir thread oluşturmak için pthread_create
fonksiyonu kullanılır.
Thread fonksiyonlarının kullanımı için pthread.h
başlık dosyası include edilmelidir.
Threadler ana program ile aynı adresleme alanını ve aynı file descriptor'ları kullanırlar.
Pthread kütüphanesi aynı zamanda senkronizasyon işlemleri için gerekli mutex ve conditional işlemleri için gerekli desteği de içermektedir.
Pthread kütüphanesi fonksiyonları kullanıldığında uygulama pthread
kütüphanesi ile de linklenmelidir:
$ gcc -o example example_thread.c -lpthread
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg)
Başarılı durumda 0 döner. Hata durumunda ise geriye bir hata kodu dönecektir.
thread
parametresi pthread_t
türünde olup önceden tanımlanması gerekir. Oluşan thread'e bu referansla her zaman erişilebilecektir.
attr
parametresi thread spesifik olarak pthread_attr_
ile başlayan fonksiyonlarla ayarlanmış, scheduling policy, stack büyüklüğü, detach policy gibi kuralları gösterir.
start_routine
thread tarafından çalıştırılacak olan fonksiyonu gösterir.
arg
ise thread tarafından çalıştırılacak fonksiyona geçirilecek void*
'a cast edilmiş genel bir veri yapısını göstermektedir.
Örnek Uygulama
#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");
return 0;
}