Questions on adaptive mutexes and trylock
jb
jb.1234abcd at gmail.com
Wed May 9 20:15:39 UTC 2012
Joe Marcus Clarke <marcus <at> marcuscom.com> writes:
>
> The newest GLib (as well as PHP APC) is starting to use adaptive mutexes
> in their code. When a mutex type is set to adaptive and you try to call
> pthread_mutex_trylock() on it, you get back an EINVAL. Is this a bug,
> or should this really be happening (the code clearly indicates adaptive
> mutexes are not handled by trylock)?
Adaptive mutex is a combination of a mutex and a spinlock with adjusted
duration of spinning ("trylocking").
The primary purpose of a spinlock is to protect portions of the code that
implement other synchronization primitives such as a mutex, etc.
The pthread_mutex_trylock() attempts to acquire a lock on a mutex.
It follows it is proper to deny direct access to (adaptive) mutex by
pthread_mutex_trylock().
> I imagine Linux is not doing this since the code doesn't abort on Linux
> as it does on FreeBSD. Should we be silently allowing trylock to
> perform a no-op on adaptive mutexes, or should we be handling adaptive
> mutexes with trylock? Thanks.
I do not know why Linux handles it the way it does.
jb
More information about the freebsd-questions
mailing list