Standart C Programlama Dili


9.25. threads.h: İş Parçacıkları

Bu dosya önce time.h başlık dosyasını içerir, sonra da çoklu iş parçacıklarının yürütülmesine destek veren bazı değişmez, tip, fonksiyon ve makrolar tanımlar. Eğer derleyici tarafından __STDC_NO_THREADS__ makrosu tanımlanmışsa, o zaman o ortam tarafından bu dosyanın ve dolayısı ile çoklu iş parçacığı desteğinin sağlanmasına gerek kalmaz.

Bu dosyada tanımlanan makrolar şunlardır:

thread_local_Thread_local ile eşanlamlı
ONCE_FLAG_INITonce_flag tipindeki bir nesneyi ilklemek için kullanılan bir değer
TSS_DTOR_ITERATIONSbir iş parçacığı sonlanırken yıkıcıların en fazla kaç kez çağrılacağını gösteren değişmez bir tamsayı ifadesi

Tipler şunlardır:

cnd_t bir koşul değişkeni için bir tanımlayıcı tutan bir nesne tipi
thrd_t bir iş parçacığı için bir tanımlayıcı tutan bir nesne tipi
tss_t iş parçacığına özgü bir alan göstergesi için bir tanımlayıcı tutan bir nesne tipi
mtx_t bir muteks (zaman uyumu sağlayıcı) için bir tanımlayıcı tutan bir nesne tipi
tss_dtor_t iş parçacığına özgü bir alan göstergesi için bir yıkıcı olarak kullanılan ve tss_create fonksiyonuna argüman olarak geçirilen void (*)(void *) tipindeki fonksiyon göstergesi
thrd_start_t yeni bir iş parçacığı oluşturmak için thrd_create fonksiyonuna argüman olarak geçirilen int (*)(void *) tipindeki fonksiyon göstergesi
once_flag call_once fonksiyonu için bir bayrak tutan bir nesne tipi

Sayım tipi değişmezleri şunlardır:

mtx_plain zaman aşımını desteklemeyen bir muteks nesnesi oluşturmak için mtx_init’e geçirilir
mtx_recursive özçağrılı kilitlemeyi destekleyen bir muteks nesnesi oluşturmak için mtx_init’e geçirilir
mtx_timed zaman aşımını destekleyen bir muteks nesnesi oluşturmak için mtx_init’e geçirilir
thrd_timedout talep edilen kaynak elde edilmeden, çağrıda belirtilen zaman aşımına ulaşıldığını belirtmek için bir zamanlı bekleme fonksiyonu tarafından döndürülür
thrd_success istenen işlemin başarılı olduğunu belirtmek için bir fonksiyon tarafından döndürülür
thrd_busy bir test ve dönüş fonksiyonu tarafından talep edilen bir kaynağın, zaten kullanımda olması yüzünden, istenen işlemin başarısız olduğunu belirtmek için bir fonksiyon tarafından döndürülür
thrd_error istenen işlemin başarısız olduğunu belirtmek için bir fonksiyon tarafından döndürülür
thrd_nomem bellek ayrılamadığı için istenen işlemin başarısız olduğunu belirtmek için bir fonksiyon tarafından döndürülür

Bu dosyada bildirimi yapılan fonksiyon prototipleri aşağıda beş grupta listelenmiştir.

İlkleme

void  call_once(once_flag * byrk, void (* fonk)(void))

Koşul Değişkeni

int   cnd_broadcast(cnd_t * kosul)
void  cnd_destroy(cnd_t * kosul)
int   cnd_init(cnd_t * kosul)
int   cnd_signal(cnd_t * kosul)
int   cnd_timedwait(cnd_t * restrict kosul, mtx_t * restrict mtks,
        const struct timespec * restrict zaman)
int   cnd_wait(cnd_t * kosul, mtx_t * mtks)

Muteks

void  mtx_destroy(mtx_t * mtks)
int   mtx_init(mtx_t * mtks, int tip)
int   mtx_lock(mtx_t * mtks)
int   mtx_timedlock(mtx_t * restrict mtks,
        const struct timespec * restrict zaman)
int   mtx_trylock(mtx_t * mtks)
int   mtx_unlock(mtx_t * mtks)

İş Parçacığı

int             thrd_create(thrd_t * isp, thrd_start_t fonk, void * arg)
thrd_t          thrd_current(void);
int             thrd_detach(thrd_t isp)
int             thrd_equal(thrd_t isp0, thrd_t isp1)
_Noreturn void  thrd_exit(int skodu)
int             thrd_join(thrd_t isp, int * skodu)
int             thrd_sleep(const struct timespec * sure,
                  struct timespec * kalan)
void            thrd_yield(void)

İş Parçacığına Uygun Depolama

int     tss_create(tss_t * anhtr, tss_dtor_t yikici)
void    tss_delete(tss_t anhtr)
void *  tss_get(tss_t anhtr)
int     tss_set(tss_t anhtr, void * deger)