summaryrefslogtreecommitdiff
path: root/thread.h
diff options
context:
space:
mode:
authorBrian Harrison <brie@corp.home.net>1998-10-24 04:01:55 +0300
committerJarkko Hietaniemi <jhi@iki.fi>1998-10-27 07:56:57 +0000
commit7f3d1cf17f00f843a4ab0c805e58fa10c222716a (patch)
treeed640cb97c8a55a367e0562df5b2fb7751655522 /thread.h
parent25e9a2e3ad9e75ccc06381c3ed3d656041a0f0e2 (diff)
downloadperl-7f3d1cf17f00f843a4ab0c805e58fa10c222716a.tar.gz
Mach cthreads support based on:
Subject: perl5.005_02 patch for mthreads To: perl5-porters@perl.org Message-ID: <MLIST_Pine.GSO.4.04.9810231410220.11111-200000@sulaco.eos.home.net> Pthread yield probe (dejavu) Cosmetic nanochange for the union semun output. Better inttypes.h probe. Undo the 'void *' $selecttype probe from #1971 because it breaks the $selectminbits test. p4raw-id: //depot/cfgperl@2095
Diffstat (limited to 'thread.h')
-rw-r--r--thread.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/thread.h b/thread.h
index 4d2c7dd43c..9e607e0c00 100644
--- a/thread.h
+++ b/thread.h
@@ -50,6 +50,68 @@ struct perl_thread *getTHR _((void));
# define PTHREAD_ATTR_SETDETACHSTATE(a,s) pthread_attr_setdetachstate(a,s)
#endif
+#ifdef I_MACH_CTHREADS
+
+/* cthreads interface */
+
+/* #include <mach/cthreads.h> is in perl.h #ifdef I_MACH_CTHREADS */
+
+#define MUTEX_INIT(m) \
+ STMT_START { \
+ *m = mutex_alloc(); \
+ if (*m) { \
+ mutex_init(*m); \
+ } else { \
+ croak("panic: MUTEX_INIT"); \
+ } \
+ } STMT_END
+
+#define MUTEX_LOCK(m) mutex_lock(*m)
+#define MUTEX_UNLOCK(m) mutex_unlock(*m)
+#define MUTEX_DESTROY(m) \
+ STMT_START { \
+ mutex_free(*m); \
+ *m = 0; \
+ } STMT_END
+
+#define COND_INIT(c) \
+ STMT_START { \
+ *c = condition_alloc(); \
+ if (*c) { \
+ condition_init(*c); \
+ } else { \
+ croak("panic: COND_INIT"); \
+ } \
+ } STMT_END
+
+#define COND_SIGNAL(c) condition_signal(*c)
+#define COND_BROADCAST(c) condition_broadcast(*c)
+#define COND_WAIT(c, m) condition_wait(*c, *m)
+#define COND_DESTROY(c) \
+ STMT_START { \
+ condition_free(*c); \
+ *c = 0; \
+ } STMT_END
+
+#define THREAD_CREATE(thr, f) (thr->self = cthread_fork(f, thr), 0)
+#define THREAD_POST_CREATE(thr)
+
+#define THREAD_RET_TYPE any_t
+#define THREAD_RET_CAST(x) ((any_t) x)
+
+#define DETACH(t) cthread_detach(t->self)
+#define JOIN(t, avp) (*(avp) = (AV *)cthread_join(t->self))
+
+#define SET_THR(thr) cthread_set_data(cthread_self(), thr)
+#define THR cthread_data(cthread_self())
+
+#define INIT_THREADS cthread_init()
+#define YIELD cthread_yield()
+#define ALLOC_THREAD_KEY
+#define SET_THREAD_SELF(thr) (thr->self = cthread_self())
+
+#endif /* I_MACH_CTHREADS */
+
#ifndef YIELD
# ifdef SCHED_YIELD
# define YIELD SCHED_YIELD