diff options
author | Brian Harrison <brie@corp.home.net> | 1998-10-24 04:01:55 +0300 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 1998-10-27 07:56:57 +0000 |
commit | 7f3d1cf17f00f843a4ab0c805e58fa10c222716a (patch) | |
tree | ed640cb97c8a55a367e0562df5b2fb7751655522 /thread.h | |
parent | 25e9a2e3ad9e75ccc06381c3ed3d656041a0f0e2 (diff) | |
download | perl-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.h | 62 |
1 files changed, 62 insertions, 0 deletions
@@ -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 |