46
46
#if (MPICH_THREAD_LEVEL != MPI_THREAD_MULTIPLE)
47
47
#error MPICH_THREAD_LEVEL should be MPI_THREAD_MULTIPLE
49
#ifndef HAVE_RUNTIME_THREADCHECK
50
#error Need HAVE_RUNTIME_THREADCHECK
54
50
#define MPIU_THREAD_CS_INIT ({ MPIDI_Mutex_initialize(); })
55
51
#define MPIU_THREAD_CS_FINALIZE
100
96
#define MPIU_THREAD_CS_INITFLAG_EXIT(_context)
101
97
#define MPIU_THREAD_CS_MEMALLOC_ENTER(_context)
102
98
#define MPIU_THREAD_CS_MEMALLOC_EXIT(_context)
103
#define MPIU_THREAD_CS_MPI_OBJ_ENTER(_context)
104
#define MPIU_THREAD_CS_MPI_OBJ_EXIT(_context)
99
#define MPIU_THREAD_CS_MPI_OBJ_ENTER(_context) MPIDI_CS_ENTER(5)
100
#define MPIU_THREAD_CS_MPI_OBJ_EXIT(_context) MPIDI_CS_EXIT(5)
105
101
#define MPIU_THREAD_CS_MSGQUEUE_ENTER(_context)
106
102
#define MPIU_THREAD_CS_MSGQUEUE_EXIT(_context)
107
103
#define MPIU_THREAD_CS_PAMI_ENTER(_context)
112
108
#elif MPIU_THREAD_GRANULARITY == MPIU_THREAD_GRANULARITY_PER_OBJECT
114
#define MPIDI_CS_ENTER(m) ({ MPIDI_Mutex_acquire(m); })
115
#define MPIDI_CS_EXIT(m) ({ MPIDI_Mutex_sync(); MPIDI_Mutex_release(m); })
116
#define MPIDI_CS_YIELD(m) ({ MPIDI_Mutex_sync(); MPIDI_Mutex_release(m); MPIDI_Mutex_acquire(m); })
117
#define MPIDI_CS_TRY(m) ({ (0==MPIDI_Mutex_try_acquire(m)); })
118
#define MPIDI_CS_SCHED_YIELD(m) ({ MPIDI_Mutex_sync(); MPIDI_Mutex_release(m); sched_yield(); MPIDI_Mutex_acquire(m); })
110
#define MPIDI_CS_ENTER(m) \
112
if (likely(MPIR_ThreadInfo.isThreaded)) { \
113
MPIDI_Mutex_acquire(m); \
117
#define MPIDI_CS_EXIT(m) \
119
if (likely(MPIR_ThreadInfo.isThreaded)) { \
120
MPIDI_Mutex_sync(); \
121
MPIDI_Mutex_release(m); \
125
#define MPIDI_CS_YIELD(m) \
127
if (likely(MPIR_ThreadInfo.isThreaded)) { \
128
MPIDI_Mutex_sync(); \
129
MPIDI_Mutex_release(m); \
130
MPIDI_Mutex_acquire(m); \
134
#define MPIDI_CS_TRY(m) \
136
if (likely(MPIR_ThreadInfo.isThreaded)) { \
137
MPIDI_Mutex_try_acquire(m); \
141
#define MPIDI_CS_SCHED_YIELD(m) \
143
if (likely(MPIR_ThreadInfo.isThreaded)) { \
144
MPIDI_Mutex_sync(); \
145
MPIDI_Mutex_release(m); \
147
MPIDI_Mutex_acquire(m); \
120
151
#define MPIU_THREAD_CS_ALLFUNC_ENTER(_context)
121
152
#define MPIU_THREAD_CS_ALLFUNC_EXIT(_context)
122
153
#define MPIU_THREAD_CS_ALLFUNC_YIELD(_context)
123
154
#define MPIU_THREAD_CS_ALLFUNC_SCHED_YIELD(_context)
124
155
#define MPIU_THREAD_CS_ALLFUNC_TRY(_context) (0)
125
#define MPIU_THREAD_CS_INIT_ENTER(_context) MPIDI_Mutex_acquire(0)
126
#define MPIU_THREAD_CS_INIT_EXIT(_context) MPIDI_Mutex_release(0)
157
#define MPIU_THREAD_CS_INIT_ENTER(_context) MPIDI_CS_ENTER(0)
158
#define MPIU_THREAD_CS_INIT_EXIT(_context) MPIDI_CS_EXIT(0)
128
160
#define MPIU_THREAD_CS_CONTEXTID_ENTER(_context) MPIDI_CS_ENTER(0)
129
161
#define MPIU_THREAD_CS_CONTEXTID_EXIT(_context) MPIDI_CS_EXIT (0)