1 #ifndef QEMU_THREAD_POSIX_H 2 #define QEMU_THREAD_POSIX_H 3 4 #include <pthread.h> 5 #include <semaphore.h> 6 7 struct QemuMutex { 8 pthread_mutex_t lock; 9 #ifdef CONFIG_DEBUG_MUTEX 10 const char *file; 11 int line; 12 #endif 13 bool initialized; 14 }; 15 16 /* 17 * QemuRecMutex cannot be a typedef of QemuMutex lest we have two 18 * compatible cases in _Generic. See qemu/lockable.h. 19 */ 20 typedef struct QemuRecMutex { 21 QemuMutex m; 22 } QemuRecMutex; 23 24 struct QemuCond { 25 pthread_cond_t cond; 26 bool initialized; 27 }; 28 29 struct QemuSemaphore { 30 #ifndef CONFIG_SEM_TIMEDWAIT 31 pthread_mutex_t lock; 32 pthread_cond_t cond; 33 unsigned int count; 34 #else 35 sem_t sem; 36 #endif 37 bool initialized; 38 }; 39 40 struct QemuEvent { 41 #ifndef __linux__ 42 pthread_mutex_t lock; 43 pthread_cond_t cond; 44 #endif 45 unsigned value; 46 bool initialized; 47 }; 48 49 struct QemuThread { 50 pthread_t thread; 51 }; 52 53 #endif 54