BG MVC Model View Controller eğitim serisi yayında...

Ana sayfa > Programlama > C Programlama > C standart kütüphanesi > <threads.h> (C11) > call_once

call_once () fonksiyonu

Bildirim

void call_once(once_flag *flag, void (*func)(void)); (C11)

Açıklama

Birkaç thread tarafından çağrılsa bile, func parametresi ile gösterilen fonksiyonu sadece bir kez çağırır. Func parametresi ile gösterilen fonksiyonun çalışmasının sona ermesi, aynı gösterge ile yapılan önceki veya sonraki call_once() fonksiyon çağrıları ile senkronize edilir.

Parametreler

flag: Func ile gösterilen fonksiyonun sadece bir defa çağrılmasını sağlayan call_once veri türünden bir değişkeni gösteren bir işaretçidir.

func: Sadece bir defa çağrılacak olan fonksiyonu gösterir.

Dönüş değeri

Yok.

Örnek


#include <stdio.h>
#include <threads.h>

void do_once(void) {
     puts("called once");
}
 
static once_flag flag = ONCE_FLAG_INIT;

int func(void* data)
{
    call_once(&flag, do_once);
}
 
int main(void)
{
    thrd_t t1, t2, t3, t4;
    thrd_create(&t1, func, NULL);
    thrd_create(&t2, func, NULL);
    thrd_create(&t3, func, NULL);
    thrd_create(&t4, func, NULL);
 
    thrd_join(t1, NULL);
    thrd_join(t2, NULL);
    thrd_join(t3, NULL);
    thrd_join(t4, NULL);
	
	return 0;
}

Yukarıdaki örnekte, program aşağıdaki satırları ekrana yazar.

İlk karakter dizisi: Bilgisayar, çevrilen karakter sayısı: 10
Elde edilen yeni karakter dizisi: Bilgi

Program bir karakter dizisinin içeriğini strxfrm() fonksiyonu ile yerel ayarlara göre çevirdikten sonra ilk 5 karakterini başka bir karakter dizisine kopyalarak ekrana yazar.