pthread_mutex_trylock() should never block
Igor Sysoev
is at rambler-co.ru
Sat Dec 6 09:51:44 PST 2003
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.
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 pthread_mutex_trylock() function will fail if:
[EBUSY]
The mutex could not be acquired because it was already locked.
[ ... ]
The pthread_mutex_lock() function may fail if:
[EDEADLK]
The current thread already owns the mutex.
--------
Igor Sysoev
http://sysoev.ru/en/
More information about the freebsd-threads
mailing list