예제 #1
0
int pthread_mutex_trylock(pthread_mutex_t *mutex)
{
    int err = pthread_mutex_trylock_impl(mutex);
    if (PTHREAD_DEBUG_ENABLED) {
        if (!err) {
            pthread_debug_mutex_lock_check(mutex);
        }
    }
    return err;
}
예제 #2
0
int pthread_mutex_lock_timeout_np(pthread_mutex_t *mutex, unsigned msecs)
{
    int err = pthread_mutex_lock_timeout_np_impl(mutex, msecs);
    if (PTHREAD_DEBUG_ENABLED) {
        if (!err) {
            pthread_debug_mutex_lock_check(mutex);
        }
    }
    return err;
}
예제 #3
0
int pthread_mutex_lock(pthread_mutex_t *mutex)
{
    int err = pthread_mutex_lock_impl(mutex);
#ifdef PTHREAD_DEBUG
    if (PTHREAD_DEBUG_ENABLED) {
        if (!err) {
            pthread_debug_mutex_lock_check(mutex);
        }
    }
#endif
    return err;
}
예제 #4
0
extern "C" int pthread_mutex_lock_timeout_np(pthread_mutex_t* mutex, unsigned ms) {
  timespec abs_timeout;
  clock_gettime(CLOCK_MONOTONIC, &abs_timeout);
  abs_timeout.tv_sec  += ms / 1000;
  abs_timeout.tv_nsec += (ms % 1000) * 1000000;
  if (abs_timeout.tv_nsec >= 1000000000) {
    abs_timeout.tv_sec++;
    abs_timeout.tv_nsec -= 1000000000;
  }

  int err = __pthread_mutex_timedlock(mutex, &abs_timeout, CLOCK_MONOTONIC);
  if (err == ETIMEDOUT) {
    err = EBUSY;
  }
  if (PTHREAD_DEBUG_ENABLED) {
    if (!err) {
      pthread_debug_mutex_lock_check(mutex);
    }
  }
  return err;
}