Skip site navigation (1)Skip section navigation (2)
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>