/* * Copyright (c) 2006 OmniTI, Inc. All rights reserved * This header file distributed under the terms of the CDDL. * Portions Copyright 2004 Sun Microsystems, Inc. All Rights reserved. */ #ifndef _SYS_THREAD_H #define _SYS_THREAD_H #include #include #include typedef pthread_t thread_t; typedef pthread_mutex_t mutex_t; typedef pthread_cond_t cond_t; #define THR_BOUND 1 #define THR_DETACHED 2 #define THR_DAEMON 4 #define USYNC_THREAD 0x00 /* private to a process */ #define USYNC_PROCESS 0x01 /* shared by processes */ #define thr_self() pthread_self() #define thr_sigsetmask pthread_sigmask #define __nthreads() 2 /* XXX: Force multi-thread */ static inline int thr_create(void *stack_base, size_t stack_size, void *(*start_func)(void *), void *arg, long flags, thread_t *new_thread_id) { pthread_attr_t attr; int rc; pthread_attr_init(&attr); if (flags & THR_DETACHED) pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); rc = pthread_create(new_thread_id, &attr, start_func, arg); pthread_attr_destroy(&attr); return rc; } static inline int _mutex_held(mutex_t *mp) { int rc; rc = pthread_mutex_trylock(mp); if (rc) return rc; pthread_mutex_unlock(mp); return rc; } static inline void _mutex_init(mutex_t *mp, int type, void *arg) { pthread_mutex_init(mp, NULL); } #define mutex_init(mp, type, arg) _mutex_init(mp, type, arg) #define mutex_lock(mp) pthread_mutex_lock(mp) #define mutex_unlock(mp) pthread_mutex_unlock(mp) #define mutex_destroy(mp) pthread_mutex_destroy(mp) #define mutex_trylock(mp) pthread_mutex_trylock(mp) #define DEFAULTMUTEX PTHREAD_MUTEX_INITIALIZER #define DEFAULTCV PTHREAD_COND_INITIALIZER #define MUTEX_HELD(mp) _mutex_held(mp) #define cond_init(c, type, arg) pthread_cond_init(c, NULL) #define cond_wait(c, m) pthread_cond_wait(c, m) #define _cond_wait(c, m) pthread_cond_wait(c, m) #define cond_signal(c) pthread_cond_signal(c) #define cond_broadcast(c) pthread_cond_broadcast(c) #define cond_destroy(c) pthread_cond_destroy(c) #define cond_timedwait pthread_cond_timedwait #define _cond_timedwait pthread_cond_timedwait #ifndef RTLD_FIRST #define RTLD_FIRST 0 #endif #endif /* _SYS_THREAD_H */