xref: /freebsd/contrib/xz/src/common/mythread.h (revision 9a14aa017b21c292740c00ee098195cd46642730)
1 ///////////////////////////////////////////////////////////////////////////////
2 //
3 /// \file       mythread.h
4 /// \brief      Wrappers for threads
5 //
6 //  Author:     Lasse Collin
7 //
8 //  This file has been put into the public domain.
9 //  You can do whatever you want with this file.
10 //
11 ///////////////////////////////////////////////////////////////////////////////
12 
13 #include "sysdefs.h"
14 
15 
16 #ifdef HAVE_PTHREAD
17 #	include <pthread.h>
18 
19 #	define mythread_once(func) \
20 	do { \
21 		static pthread_once_t once_ = PTHREAD_ONCE_INIT; \
22 		pthread_once(&once_, &func); \
23 	} while (0)
24 
25 #	define mythread_sigmask(how, set, oset) \
26 		pthread_sigmask(how, set, oset)
27 
28 #else
29 
30 #	define mythread_once(func) \
31 	do { \
32 		static bool once_ = false; \
33 		if (!once_) { \
34 			func(); \
35 			once_ = true; \
36 		} \
37 	} while (0)
38 
39 #	define mythread_sigmask(how, set, oset) \
40 		sigprocmask(how, set, oset)
41 
42 #endif
43