54 #include <sys/sched.h> 58 #if defined(OPSYS_SUN) 105 #if defined( HAVE_PTHREAD_MUTEXATTR_SETTYPE ) 106 pthread_mutexattr_t mutexattr;
108 iRC = pthread_mutexattr_init(&mutexattr);
111 #if defined( HAVE_PTHREAD_MUTEX_RECURSIVE_NP ) 112 iRC = pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_RECURSIVE_NP);
113 #elif defined( HAVE_PTHREAD_MUTEX_RECURSIVE ) 114 iRC = pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_RECURSIVE);
115 #elif defined( HAVE_PTHREAD_MUTEX_ERRORCHECK ) 116 iRC = pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_ERRORCHECK);
118 fprintf(stderr,
" *** ERROR: Unknown 2nd argument to pthread_mutexattr_settype()!\n");
123 iRC = pthread_mutex_init(&(this->
semMutex), &mutexattr);
127 iRC = pthread_mutexattr_destroy(&mutexattr);
131 iRC = pthread_cond_init(&(this->
semCond), NULL);
134 iRC = pthread_mutex_init(&(this->
semMutex), NULL);
137 iRC = pthread_cond_init(&(this->
semCond), NULL);
142 fprintf(stderr,
" *** ERROR: At RexxSemaphore(), pthread_mutex_init - RC = %d !\n", iRC);
145 fprintf(stderr,
" *** ERROR: Application was not built thread safe!\n");
157 pthread_cond_destroy(&(this->
semCond));
158 pthread_mutex_destroy(&(this->
semMutex));
168 rc = pthread_mutex_lock(&(this->
semMutex));
170 rc = pthread_cond_broadcast(&(this->
semCond));
171 rc = pthread_mutex_unlock(&(this->
semMutex));
177 int schedpolicy, i_prio;
178 struct sched_param schedparam;
180 pthread_getschedparam(pthread_self(), &schedpolicy, &schedparam);
181 i_prio = schedparam.sched_priority;
182 schedparam.sched_priority = 100;
183 pthread_setschedparam(pthread_self(),SCHED_OTHER, &schedparam);
184 rc = pthread_mutex_lock(&(this->
semMutex));
189 pthread_mutex_unlock(&(this->
semMutex));
190 schedparam.sched_priority = i_prio;
191 pthread_setschedparam(pthread_self(),SCHED_OTHER, &schedparam);
196 struct timespec timestruct;
200 timestruct.tv_nsec = 0;
201 timestruct.tv_sec = t/1000+time(Tpnt);
202 pthread_mutex_lock(&(this->
semMutex));
206 result = pthread_cond_timedwait(&(this->
semCond),&(this->
semMutex),×truct);
208 pthread_mutex_unlock(&(this->
semMutex));
210 return result != ETIMEDOUT;
215 pthread_mutex_lock(&(this->
semMutex));
217 pthread_mutex_unlock(&(this->
semMutex));
251 #if defined( HAVE_PTHREAD_MUTEXATTR_SETTYPE ) 252 pthread_mutexattr_t mutexattr;
254 iRC = pthread_mutexattr_init(&mutexattr);
257 #if defined( HAVE_PTHREAD_MUTEX_RECURSIVE_NP ) 258 iRC = pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_RECURSIVE_NP);
259 #elif defined( HAVE_PTHREAD_MUTEX_RECURSIVE ) 260 iRC = pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_RECURSIVE);
261 #elif defined( HAVE_PTHREAD_MUTEX_ERRORCHECK ) 262 iRC = pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_ERRORCHECK);
264 fprintf(stderr,
" *** ERROR: Unknown 2nd argument to pthread_mutexattr_settype()!\n");
269 iRC = pthread_mutex_init(&(this->
mutexMutex), &mutexattr);
273 iRC = pthread_mutexattr_destroy(&mutexattr);
276 iRC = pthread_mutex_init(&(this->
mutexMutex), NULL);
280 fprintf(stderr,
" *** ERROR: At RexxMutex(), pthread_mutex_init - RC = %d !\n", iRC);