call_once, once_flag, ONCE_FLAG_INIT
From cppreference.net
|
Défini dans l'en-tête
<threads.h>
|
||
|
void
call_once
(
once_flag
*
flag,
void
(
*
func
)
(
void
)
)
;
|
(1) | (depuis C11) |
|
typedef
/* non spécifié */
once_flag
|
(2) | (depuis C11) |
|
#define ONCE_FLAG_INIT /* non spécifié */
|
(3) | (depuis C11) |
1)
Appelle la fonction
func
exactement une fois, même si elle est invoquée depuis plusieurs threads. L'achèvement de la fonction
func
se synchronise avec tous les appels précédents ou ultérieurs à
call_once
avec la même variable
flag
.
2)
Type d'objet complet capable de contenir un indicateur utilisé par
call_once
.
3)
S'étend à une valeur qui peut être utilisée pour initialiser un objet de type
once_flag
.
Table des matières |
Paramètres
| flag | - |
pointeur vers un objet de type
call_once
utilisé pour garantir que
func
n'est appelée qu'une seule fois
|
| func | - | la fonction à exécuter une seule fois |
Valeur de retour
(aucun)
Notes
L'équivalent POSIX de cette fonction est
pthread_once
.
Exemple
Exécuter ce code
#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); }
Sortie :
called once
Références
- Norme C17 (ISO/CEI 9899:2018) :
-
- 7.26.2.1 La fonction call_once (p: 275)
-
- 7.26.1/3 ONCE_FLAG_INIT (p: 274)
- Norme C11 (ISO/IEC 9899:2011):
-
- 7.26.2.1 La fonction call_once (p: 378)
-
- 7.26.1/3 ONCE_FLAG_INIT (p: 376)
Voir aussi
|
Documentation C++
pour
call_once
|