vxx2 / vlib / builtin / closure / closure_once_windows.h
28 lines · 22 sloc · 630 bytes · 1a2d0e5b70d6dd1baaa60290f2446e9ece4324bf
Raw
1#ifndef V_CLOSURE_ONCE_WINDOWS_H
2#define V_CLOSURE_ONCE_WINDOWS_H
3
4#include <windows.h>
5
6typedef void (*v_closure_init_fn)(void);
7
8#ifndef V_CLOSURE_STATIC_INLINE
9# ifdef _MSC_VER
10# define V_CLOSURE_STATIC_INLINE static __inline
11# else
12# define V_CLOSURE_STATIC_INLINE static inline
13# endif
14#endif
15
16static SRWLOCK v_closure_once_lock;
17static int v_closure_once_done = 0;
18
19V_CLOSURE_STATIC_INLINE void v_closure_init_once(v_closure_init_fn init_fn) {
20 AcquireSRWLockExclusive(&v_closure_once_lock);
21 if (!v_closure_once_done) {
22 init_fn();
23 v_closure_once_done = 1;
24 }
25 ReleaseSRWLockExclusive(&v_closure_once_lock);
26}
27
28#endif
29