⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 posix_funcs.i

📁 fortran并行计算包
💻 I
字号:
/* -*- 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()						\{									\    /* FIXME: need to check for different types of yield */	\    sched_yield();							\}/* *    Mutexes *//* FIXME: using constant initializer if available */#if !defined(MPICH_DEBUG_MUTEX) || !defined(PTHREAD_MUTEX_ERRORCHECK_NP)#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__;                                     \    }                                                                   \}#else /* MPICH_DEBUG_MUTEX */#define MPE_Thread_mutex_create(mutex_ptr_, err_ptr_)                   \{                                                                       \    int err__;                                                          \    pthread_mutexattr_t attr__;                                         \                                                                        \    pthread_mutexattr_init(&attr__);                                    \    pthread_mutexattr_settype(&attr__, PTHREAD_MUTEX_ERRORCHECK_NP);    \    err__ = pthread_mutex_init((mutex_ptr_), &attr__);                  \    if (err__)                                                          \        MPIU_Internal_sys_error_printf("pthread_mutex_init", err__,     \                                       "    %s:%d\n", __FILE__, __LINE__);\    if ((err_ptr_) != NULL)                                              \    {                                                                    \	/* FIXME: convert error to an MPE_THREAD_ERR value */            \	*(int *)(err_ptr_) = err__;                                      \    }                                                                    \}#endif#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__;				\    }								\}#ifndef MPICH_DEBUG_MUTEX#define MPE_Thread_mutex_lock(mutex_ptr_, err_ptr_)             \{                                                               \    int err__;                                                  \    MPIU_DBG_MSG(THREAD,TYPICAL,"Enter MPE_Thread_mutex");      \    err__ = pthread_mutex_lock(mutex_ptr_);                     \    if ((err_ptr_) != NULL)                                     \    {                                                           \	/* FIXME: convert error to an MPE_THREAD_ERR value */   \	*(int *)(err_ptr_) = err__;                             \    }                                                           \}#else /* MPICH_DEBUG_MUTEX */#define MPE_Thread_mutex_lock(mutex_ptr_, err_ptr_)             \{                                                               \    int err__;                                                  \    MPIU_DBG_MSG(THREAD,TYPICAL,"Enter MPE_Thread_mutex");      \    err__ = pthread_mutex_lock(mutex_ptr_);                     \    if (err__)                                                  \    {                                                           \        MPIU_DBG_MSG_S(THREAD,TYPICAL,"  mutex lock error: %s", strerror(err__));       \        MPIU_Internal_sys_error_printf("pthread_mutex_lock", err__,                     \                                       "    %s:%d\n", __FILE__, __LINE__);              \    }                                                          \    if ((err_ptr_) != NULL)                                    \    {                                                          \	/* FIXME: convert error to an MPE_THREAD_ERR value */  \	*(int *)(err_ptr_) = err__;                            \    }                                                          \}#endif#ifndef MPICH_DEBUG_MUTEX#define MPE_Thread_mutex_unlock(mutex_ptr_, err_ptr_)           \{                                                               \    int err__;                                                  \                                                                \    MPIU_DBG_MSG(THREAD,TYPICAL,"Exiting MPE_Thread_mutex");    \    err__ = pthread_mutex_unlock(mutex_ptr_);                   \    if ((err_ptr_) != NULL)                                     \    {                                                           \	/* FIXME: convert error to an MPE_THREAD_ERR value */   \	*(int *)(err_ptr_) = err__;                             \    }                                                           \}#else /* MPICH_DEBUG_MUTEX */#define MPE_Thread_mutex_unlock(mutex_ptr_, err_ptr_)           \{                                                               \    int err__;                                                  \                                                                \    MPIU_DBG_MSG(THREAD,TYPICAL,"Exiting MPE_Thread_mutex");    \    err__ = pthread_mutex_unlock(mutex_ptr_);                   \    if (err__)                                                  \    {                                                           \        MPIU_DBG_MSG_S(THREAD,TYPICAL,"  mutex unlock error: %s", strerror(err__));     \        MPIU_Internal_sys_error_printf("pthread_mutex_unlock", err__,                   \                                       "    %s:%d\n", __FILE__, __LINE__);              \    }                                                           \    if ((err_ptr_) != NULL)                                     \    {                                                           \	/* FIXME: convert error to an MPE_THREAD_ERR value */   \	*(int *)(err_ptr_) = err__;                             \    }                                                           \}#endif#ifndef MPICH_DEBUG_MUTEX#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 */        \    }                                                                \}#else /* MPICH_DEBUG_MUTEX */#define MPE_Thread_mutex_trylock(mutex_ptr_, flag_ptr_, err_ptr_)    \{                                                                    \    int err__;                                                       \                                                                     \    err__ = pthread_mutex_trylock(mutex_ptr_);                       \    if (err__ && err__ != EBUSY)                                     \    {                                                                \        MPIU_DBG_MSG_S(THREAD,TYPICAL,"  mutex trylock error: %s", strerror(err__));    \        MPIU_Internal_sys_error_printf("pthread_mutex_trylock", err__,                  \                                       "    %s:%d\n", __FILE__, __LINE__);              \    }                                                                \    *(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 */        \    }                                                                \}#endif/* * 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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -