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.