Date: Sat, 6 Dec 2003 20:51:40 +0300 (MSK) From: Igor Sysoev <is@rambler-co.ru> To: threads@freebsd.org Subject: pthread_mutex_trylock() should never block Message-ID: <Pine.BSF.4.21.0312062051100.45645-100000@is>
next in thread | raw e-mail | index | archive | help
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/
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0312062051100.45645-100000>