posix_funcs.i

来自「mpi并行计算的c++代码 可用vc或gcc编译通过 可以用来搭建并行计算试验环」· I 代码 · 共 230 行

I
230
字号
/* -*- Mode: C; c-basic-offset:4 ; -*- *//* * *  (C) 2001 by Argonne National Laboratory. *      See COPYRIGHT in top-level directory. *//* * Threads *//* MPE_Thread_create() defined in mpe_thread_posix.c */#define MPE_Thread_exit()			\{						\    pthread_exit(NULL);				\}#define MPE_Thread_self(id_)			\{						\    *(id_) = pthread_self();			\}#define MPE_Thread_same(id1_, id2_, same_)			\{								\    *(same_) = pthread_equal(*(id1_), *(id2_)) ? TRUE : FALSE;	\}#define MPE_Thread_yield()						\{									\    /* XXX: FIXME: need to check for different types of yield */	\    sched_yield();							\}/* *    Mutexes *//* FIXME: using constant initializer if available */#define MPE_Thread_mutex_create(mutex_ptr_, err_ptr_)		\{								\    int err__;							\								\    err__ = pthread_mutex_init((mutex_ptr_), NULL);		\    if ((err_ptr_) != NULL)					\    {								\	/* FIXME: convert error to an MPE_THREAD_ERR value */	\	*(int *)(err_ptr_) = err__;				\    }								\}#define MPE_Thread_mutex_destroy(mutex_ptr_, err_ptr_)		\{								\    int err__;							\								\    err__ = pthread_mutex_destroy(mutex_ptr_);			\    if ((err_ptr_) != NULL)					\    {								\	/* FIXME: convert error to an MPE_THREAD_ERR value */	\	*(int *)(err_ptr_) = err__;				\    }								\}#define MPE_Thread_mutex_lock(mutex_ptr_, err_ptr_)		\{								\    int err__;							\								\    err__ = pthread_mutex_lock(mutex_ptr_);			\    if ((err_ptr_) != NULL)					\    {								\	/* FIXME: convert error to an MPE_THREAD_ERR value */	\	*(int *)(err_ptr_) = err__;				\    }								\}#define MPE_Thread_mutex_unlock(mutex_ptr_, err_ptr_)		\{								\    int err__;							\								\    err__ = pthread_mutex_unlock(mutex_ptr_);			\    if ((err_ptr_) != NULL)					\    {								\	/* FIXME: convert error to an MPE_THREAD_ERR value */	\	*(int *)(err_ptr_) = err__;				\    }								\}#define MPE_Thread_mutex_trylock(mutex_ptr_, flag_ptr_, err_ptr_)		\{										\    int err__;									\										\    err__ = pthread_mutex_trylock(mutex_ptr_);					\    *(flag_ptr_) = (err__ == 0) ? TRUE : FALSE;					\    if ((err_ptr_) != NULL)							\    {										\	*(int *)(err_ptr_) = (err__ == EBUSY) : MPE_THREAD_SUCCESS ? err__;	\	/* FIXME: convert error to an MPE_THREAD_ERR value */			\    }										\}/* * Condition Variables */#define MPE_Thread_cond_create(cond_ptr_, err_ptr_)		\{								\    int err__;							\    								\    err__ = pthread_cond_init((cond_ptr_), NULL);		\    if ((err_ptr_) != NULL)					\    {								\	/* FIXME: convert error to an MPE_THREAD_ERR value */	\	*(int *)(err_ptr_) = err__;				\    }								\}#define MPE_Thread_cond_destroy(cond_ptr_, err_ptr_)		\{								\    int err__;							\    								\    err__ = pthread_cond_destroy(cond_ptr_);			\    if ((err_ptr_) != NULL)					\    {								\	/* FIXME: convert error to an MPE_THREAD_ERR value */	\	*(int *)(err_ptr_) = err__;				\    }								\}#define MPE_Thread_cond_wait(cond_ptr_, mutex_ptr_, err_ptr_)						\{													\    int err__;												\    													\    /* The latest pthread specification says that cond_wait routines aren't allowed to return EINTR,	\       but some of the older implementations still do. */						\    do													\    {													\	err__ = pthread_cond_wait((cond_ptr_), (mutex_ptr_));						\    }													\    while (err__ == EINTR);										\													\    if ((err_ptr_) != NULL)										\    {													\	/* FIXME: convert error to an MPE_THREAD_ERR value */						\	*(int *)(err_ptr_) = err__;									\    }													\}#define MPE_Thread_cond_broadcast(cond_ptr_, err_ptr_)		\{								\    int err__;							\    								\    err__ = pthread_cond_broadcast(cond_ptr_);			\								\    if ((err_ptr_) != NULL)					\    {								\	/* FIXME: convert error to an MPE_THREAD_ERR value */	\	*(int *)(err_ptr_) = err__;				\    }								\}#define MPE_Thread_cond_signal(cond_ptr_, err_ptr_)		\{								\    int err__;							\								\    err__ = pthread_cond_signal(cond_ptr_);			\								\    if ((err_ptr_) != NULL)					\    {								\	/* FIXME: convert error to an MPE_THREAD_ERR value */	\	*(int *)(err_ptr_) = err__;				\    }								\}/* * Thread Local Storage */#define MPE_Thread_tls_create(exit_func_ptr_, tls_ptr_, err_ptr_)	\{									\    int err__;								\    									\    err__ = pthread_key_create((tls_ptr_), (exit_func_ptr_));		\									\    if ((err_ptr_) != NULL)						\    {									\	/* FIXME: convert error to an MPE_THREAD_ERR value */		\	*(int *)(err_ptr_) = err__;					\    }									\}#define MPE_Thread_tls_destroy(tls_ptr_, err_ptr_)		\{								\    int err__;							\    								\    err__ = pthread_key_delete(*(tls_ptr_));			\								\    if ((err_ptr_) != NULL)					\    {								\	/* FIXME: convert error to an MPE_THREAD_ERR value */	\	*(int *)(err_ptr_) = err__;				\    }								\}#define MPE_Thread_tls_set(tls_ptr_, value_, err_ptr_)		\{								\    int err__;							\								\    err__ = pthread_setspecific(*(tls_ptr_), (value_));		\								\    if ((err_ptr_) != NULL)					\    {								\	/* FIXME: convert error to an MPE_THREAD_ERR value */	\	*(int *)(err_ptr_) = err__;				\    }								\}#define MPE_Thread_tls_get(tls_ptr_, value_ptr_, err_ptr_)	\{								\    *(value_ptr_) = pthread_getspecific(*(tls_ptr_));		\								\    if ((err_ptr_) != NULL)					\    {								\	/* FIXME: convert error to an MPE_THREAD_ERR value */	\	*(int *)(err_ptr_) = MPE_THREAD_SUCCESS;		\    }								\}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?