Faster mutex lock() and unlock()

haypo at inl.fr haypo at inl.fr
Mon Jul 10 14:57:38 CEST 2006


Hi,

I would like to know your opinion about replacing old ath_mutex_lock() with:

int
ath_mutex_lock (ath_mutex_t *lock)
{
  if (ops_set)
    {
      return (*ops.mutex_lock) (lock);
    }
  else
    {
#ifndef NDEBUG
      assert (*lock == MUTEX_UNLOCKED);
      *lock = MUTEX_LOCKED;
#endif
      return 0;
    }
}

===> remove "int ret = mutex_init (lock, 1);"

Since currently locking a mutex takes 3 mutex operation:
  1. lock(check_init_lock) (and then maybe init mutex)
  2. unlock(check_init_lock)
  3. lock(mutex)

That's heavy and may cost a lot in multithead environment since
check_init_lock is common to all threads.

I can write the patch to remove mutex_init() call in lock() and unlock(),
which means check all lock() and unlock() calls (to check that mutex is
already initialized). But first I would like to know if you prefer very
strong function, or fast function with a big warning :-) (don't call
lock/unlock before initialize them).

Haypo






More information about the Gcrypt-devel mailing list