2 * timed-thread.h: Implementation of timed thread joining
5 * Dick Porter (dick@ximian.com)
7 * (C) 2002 Ximian, Inc.
10 #ifndef _WAPI_TIMED_THREAD_H_
11 #define _WAPI_TIMED_THREAD_H_
16 #ifdef HAVE_SEMAPHORE_H
17 #include <semaphore.h>
20 #include <mach/mach_init.h>
21 #include <mach/task.h>
22 #include <mach/semaphore.h>
23 typedef semaphore_t MonoSemType;
24 #define MONO_SEM_INIT(addr,value) semaphore_create(current_task(), (addr), SYNC_POLICY_FIFO, (value))
25 #define MONO_SEM_WAIT(sem) semaphore_wait(*(sem))
26 #define MONO_SEM_POST(sem) semaphore_signal(*(sem))
27 #define MONO_SEM_DESTROY(sem) semaphore_destroy(current_task(), *(sem))
29 typedef sem_t MonoSemType;
30 #define MONO_SEM_INIT(addr,value) sem_init ((addr), 0, (value))
31 #define MONO_SEM_WAIT(sem) sem_wait((sem))
32 #define MONO_SEM_POST(sem) sem_post((sem))
33 #define MONO_SEM_DESTROY(sem) sem_destroy((sem))
36 #include "mono-mutex.h"
41 mono_mutex_t join_mutex;
42 pthread_cond_t exit_cond;
45 MonoSemType suspend_sem;
46 MonoSemType suspended_sem;
47 guint32 (*start_routine)(gpointer arg);
48 void (*exit_routine)(guint32 exitstatus, gpointer userdata);
50 gpointer exit_userdata;
56 extern void _wapi_timed_thread_exit(guint32 exitstatus) G_GNUC_NORETURN;
57 extern int _wapi_timed_thread_create(TimedThread **threadp,
58 const pthread_attr_t *attr,
60 guint32 (*start_routine)(gpointer),
61 void (*exit_routine)(guint32, gpointer),
62 gpointer arg, gpointer exit_userdata);
63 extern int _wapi_timed_thread_attach(TimedThread **threadp,
64 void (*exit_routine)(guint32, gpointer),
65 gpointer exit_userdata);
66 extern int _wapi_timed_thread_join(TimedThread *thread,
67 struct timespec *timeout,
69 extern void _wapi_timed_thread_destroy (TimedThread *thread);
70 extern void _wapi_timed_thread_suspend (TimedThread *thread);
71 extern void _wapi_timed_thread_resume (TimedThread *thread);
73 #endif /* _WAPI_TIMED_THREAD_H_ */