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

📄 mpe_log_thread.h.in

📁 fortran并行计算包
💻 IN
字号:
/*   (C) 2007 by Argonne National Laboratory.       See COPYRIGHT in top-level directory.*/@PTHREAD_IN_MPI_DEF@#define MPE_ThreadID_t   inttypedef struct {    MPE_ThreadID_t   thdID;    int              is_log_on;} MPE_ThreadStm_t;#if defined( HAVE_PTHREAD_IN_MPI )#include <pthread.h>#include "mpe_callstack.h"#define MPE_LOG_THREAD_PRINTSTACK() \        do { \            MPE_CallStack_t  cstk; \            MPE_CallStack_init( &cstk ); \            MPE_CallStack_fancyprint( &cstk, 2, \                                      "\t", 1, MPE_CALLSTACK_UNLIMITED ); \        } while (0)/* MPE coarse-grained lock support mechanism */extern pthread_mutex_t  MPE_Thread_mutex;extern pthread_key_t    MPE_ThreadStm_key;extern MPE_ThreadID_t   MPE_Thread_count;#define MPE_LOG_THREADSTM_DECL \    MPE_ThreadStm_t *thdstm = NULL;#define MPE_LOG_THREAD_LOCK  \    if ( pthread_mutex_lock( &MPE_Thread_mutex ) != 0 ) { \        perror( "MPE_LOG_THREAD: pthread_mutex_lock() fails!\n" ); \        MPE_LOG_THREAD_PRINTSTACK(); \        pthread_exit( NULL ); \    }#define MPE_LOG_THREAD_UNLOCK \    if ( pthread_mutex_unlock( &MPE_Thread_mutex ) != 0 ) { \        perror( "MPE_LOG_THREAD: pthread_mutex_unlock() fails!\n" ); \        MPE_LOG_THREAD_PRINTSTACK(); \        pthread_exit( NULL ); \    }/* MPE_Thread_count is global variable and should be protected by a mutex */#define MPE_LOG_THREADSTM_SET \    MPE_LOG_THREAD_LOCK \    thdstm  = (MPE_ThreadStm_t *) malloc( sizeof(MPE_ThreadStm_t) ); \    thdstm->thdID     = MPE_Thread_count ; \    thdstm->is_log_on = 1; \    if ( pthread_setspecific( MPE_ThreadStm_key, thdstm ) != 0 ) { \        perror( "MPE_LOG_THREAD: pthread_setspecific() fails!\n" ); \        MPE_LOG_THREAD_PRINTSTACK(); \        pthread_exit( NULL ); \    } \    MPE_Thread_count++; \    MPE_LOG_THREAD_UNLOCK#define MPE_LOG_THREADSTM_GET \    thdstm = (MPE_ThreadStm_t *) pthread_getspecific( MPE_ThreadStm_key ); \    if ( thdstm == NULL ) { \        MPE_LOG_THREADSTM_SET \    }#define MPE_LOG_THREAD_INIT      MPE_Log_thread_init();#define MPE_LOG_THREAD_FINALIZE  MPE_Log_thread_sync( MPE_Thread_count );void MPE_Log_thread_init( void );#define THREADID        thdstm->thdID#define IS_MPELOG_ON    thdstm->is_log_on#else/* When there is no thread support, thdID has to be a constant, i.e. 0 */#define MPE_LOG_THREADSTM_DECL/* Define everything else to NULL */#define MPE_LOG_THREAD_LOCK#define MPE_LOG_THREAD_UNLOCK#define MPE_LOG_THREADSTM_SET#define MPE_LOG_THREADSTM_GET#define MPE_LOG_THREAD_INIT#define MPE_LOG_THREAD_FINALIZE#define THREADID        0#define IS_MPELOG_ON    is_mpelog_on#endif

⌨️ 快捷键说明

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