thread.h revision 0c0b2b4e96b030854987b16a779e30a3741d3b0d
15d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifndef __QEMU_THREAD_H
25d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define __QEMU_THREAD_H 1
35d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include "semaphore.h"
45d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include "pthread.h"
55d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
65d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct QemuMutex {
75d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    pthread_mutex_t lock;
85d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner};
95d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct QemuCond {
115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    pthread_cond_t cond;
125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner};
135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct QemuThread {
155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    pthread_t thread;
165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner};
175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct QemuMutex QemuMutex;
195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct QemuCond QemuCond;
205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct QemuThread QemuThread;
215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid qemu_mutex_init(QemuMutex *mutex);
230c0b2b4e96b030854987b16a779e30a3741d3b0dDavid Turnervoid qemu_mutex_destroy(QemuMutex *mutex);
245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid qemu_mutex_lock(QemuMutex *mutex);
255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint qemu_mutex_trylock(QemuMutex *mutex);
265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint qemu_mutex_timedlock(QemuMutex *mutex, uint64_t msecs);
275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid qemu_mutex_unlock(QemuMutex *mutex);
285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid qemu_cond_init(QemuCond *cond);
300c0b2b4e96b030854987b16a779e30a3741d3b0dDavid Turnervoid qemu_cond_destroy(QemuCond *cond);
315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid qemu_cond_signal(QemuCond *cond);
325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid qemu_cond_broadcast(QemuCond *cond);
335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid qemu_cond_wait(QemuCond *cond, QemuMutex *mutex);
345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint qemu_cond_timedwait(QemuCond *cond, QemuMutex *mutex, uint64_t msecs);
355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid qemu_thread_create(QemuThread *thread,
375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                       void *(*start_routine)(void*),
385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                       void *arg);
395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid qemu_thread_signal(QemuThread *thread, int sig);
405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid qemu_thread_self(QemuThread *thread);
415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint qemu_thread_equal(QemuThread *thread1, QemuThread *thread2);
420c0b2b4e96b030854987b16a779e30a3741d3b0dDavid Turnervoid qemu_thread_exit(void *retval);
430c0b2b4e96b030854987b16a779e30a3741d3b0dDavid Turner
445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
45