📄 mpe_log_thread.h.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 + -