54 #include <sys/sched.h>
58 #if defined(OPSYS_SUN)
107 #if defined( HAVE_PTHREAD_MUTEXATTR_SETTYPE )
108 pthread_mutexattr_t mutexattr;
110 iRC = pthread_mutexattr_init(&mutexattr);
113 #if defined( HAVE_PTHREAD_MUTEX_RECURSIVE_NP )
114 iRC = pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_RECURSIVE_NP);
115 #elif defined( HAVE_PTHREAD_MUTEX_RECURSIVE )
116 iRC = pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_RECURSIVE);
117 #elif defined( HAVE_PTHREAD_MUTEX_ERRORCHECK )
118 iRC = pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_ERRORCHECK);
120 fprintf(stderr,
" *** ERROR: Unknown 2nd argument to pthread_mutexattr_settype()!\n");
125 iRC = pthread_mutex_init(&(this->
semMutex), &mutexattr);
129 iRC = pthread_mutexattr_destroy(&mutexattr);
133 iRC = pthread_cond_init(&(this->
semCond), NULL);
136 iRC = pthread_mutex_init(&(this->
semMutex), NULL);
139 iRC = pthread_cond_init(&(this->
semCond), NULL);
144 fprintf(stderr,
" *** ERROR: At RexxSemaphore(), pthread_mutex_init - RC = %d !\n", iRC);
147 fprintf(stderr,
" *** ERROR: Application was not built thread safe!\n");
159 pthread_cond_destroy(&(this->
semCond));
160 pthread_mutex_destroy(&(this->
semMutex));
170 rc = pthread_mutex_lock(&(this->
semMutex));
172 rc = pthread_cond_broadcast(&(this->
semCond));
173 rc = pthread_mutex_unlock(&(this->
semMutex));
179 int schedpolicy, i_prio;
180 struct sched_param schedparam;
182 pthread_getschedparam(pthread_self(), &schedpolicy, &schedparam);
183 i_prio = schedparam.sched_priority;
184 schedparam.sched_priority = 100;
185 pthread_setschedparam(pthread_self(),SCHED_OTHER, &schedparam);
186 rc = pthread_mutex_lock(&(this->
semMutex));
190 #ifdef CONCURRENCY_DEBUG
195 #ifdef CONCURRENCY_DEBUG
201 pthread_mutex_unlock(&(this->
semMutex));
202 schedparam.sched_priority = i_prio;
203 pthread_setschedparam(pthread_self(),SCHED_OTHER, &schedparam);
208 struct timespec timestruct;
212 timestruct.tv_nsec = 0;
213 timestruct.tv_sec = t/1000+time(Tpnt);
214 pthread_mutex_lock(&(this->
semMutex));
217 #ifdef CONCURRENCY_DEBUG
222 result = pthread_cond_timedwait(&(this->
semCond),&(this->
semMutex),×truct);
223 #ifdef CONCURRENCY_DEBUG
228 pthread_mutex_unlock(&(this->
semMutex));
230 return result != ETIMEDOUT;
235 pthread_mutex_lock(&(this->
semMutex));
237 pthread_mutex_unlock(&(this->
semMutex));
272 #if defined( HAVE_PTHREAD_MUTEXATTR_SETTYPE )
273 pthread_mutexattr_t mutexattr;
275 iRC = pthread_mutexattr_init(&mutexattr);
278 #if defined( HAVE_PTHREAD_MUTEX_RECURSIVE_NP )
279 iRC = pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_RECURSIVE_NP);
280 #elif defined( HAVE_PTHREAD_MUTEX_RECURSIVE )
281 iRC = pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_RECURSIVE);
282 #elif defined( HAVE_PTHREAD_MUTEX_ERRORCHECK )
283 iRC = pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_ERRORCHECK);
285 fprintf(stderr,
" *** ERROR: Unknown 2nd argument to pthread_mutexattr_settype()!\n");
290 iRC = pthread_mutex_init(&(this->
mutexMutex), &mutexattr);
294 iRC = pthread_mutexattr_destroy(&mutexattr);
297 iRC = pthread_mutex_init(&(this->
mutexMutex), NULL);
301 fprintf(stderr,
" *** ERROR: At RexxMutex(), pthread_mutex_init - RC = %d !\n", iRC);
#define CONCURRENCY_TRACE
pthread_mutex_t mutexMutex
SysMutex(const char *variable)
const char * mutexVariable
SysSemaphore(const char *variable)
void wait(const char *ds, int di)
static wholenumber_t currentThreadId()
static bool traceConcurrency()
void dbgprintf(const char *format,...)