pthread_mutex_trylock() should never block
eischen at vigrid.com
Sat Dec 6 10:24:41 PST 2003
On Sat, 6 Dec 2003, Igor Sysoev wrote:
> The current pthread_mutex_trylock() implementation in both libpthread (libkse)
> and libthr can block if mutex is locked by another thread.
> libphtread calls THR_LOCK_ACQUIRE() and it can be blocked.
That's an implementation detail. Threads release the low-level
lock (THR_LOCK_ACQUIRE/THR_LOCK_RELEASE) after they take the mutex.
I don't believe we (libpthread) are conflicting with POSIX in
> libthr's pthread_mutex_trylock() is too heavy - it calls 3 syscalls:
> sigprocmask()/umtx_lock()/sigprocmask() and can be blocked too.
> SUSv2 states:
> [ http://www.opengroup.org/onlinepubs/007908799/xsh/pthread_mutex_lock.html ]
> The function pthread_mutex_trylock() is identical to pthread_mutex_lock()
> except that if the mutex object referenced by mutex is currently locked
> (by any thread, including the current thread), the call returns immediately.
The low-level locks are necessary (at least in libpthread implementation)
to safely test the mutex for ownership.
More information about the freebsd-threads