Merge branch 'ag/sequencer-todo-updates'
[git] / thread-utils.h
1 #ifndef THREAD_COMPAT_H
2 #define THREAD_COMPAT_H
3
4 #ifndef NO_PTHREADS
5 #include <pthread.h>
6
7 #define HAVE_THREADS 1
8
9 #else
10
11 #define HAVE_THREADS 0
12
13 /*
14  * macros instead of typedefs because pthread definitions may have
15  * been pulled in by some system dependencies even though the user
16  * wants to disable pthread.
17  */
18 #define pthread_t int
19 #define pthread_mutex_t int
20 #define pthread_cond_t int
21 #define pthread_key_t int
22
23 #define pthread_mutex_init(mutex, attr) dummy_pthread_init(mutex)
24 #define pthread_mutex_lock(mutex)
25 #define pthread_mutex_unlock(mutex)
26 #define pthread_mutex_destroy(mutex)
27
28 #define pthread_cond_init(cond, attr) dummy_pthread_init(cond)
29 #define pthread_cond_wait(cond, mutex)
30 #define pthread_cond_signal(cond)
31 #define pthread_cond_broadcast(cond)
32 #define pthread_cond_destroy(cond)
33
34 #define pthread_key_create(key, attr) dummy_pthread_init(key)
35 #define pthread_key_delete(key)
36
37 #define pthread_create(thread, attr, fn, data) \
38         dummy_pthread_create(thread, attr, fn, data)
39 #define pthread_join(thread, retval) \
40         dummy_pthread_join(thread, retval)
41
42 #define pthread_setspecific(key, data)
43 #define pthread_getspecific(key) NULL
44
45 int dummy_pthread_create(pthread_t *pthread, const void *attr,
46                          void *(*fn)(void *), void *data);
47 int dummy_pthread_join(pthread_t pthread, void **retval);
48
49 int dummy_pthread_init(void *);
50
51 #endif
52
53 int online_cpus(void);
54 int init_recursive_mutex(pthread_mutex_t*);
55
56
57 #endif /* THREAD_COMPAT_H */