Defined in header <threads.h>
int mtx_trylock( mtx_t *mutex );
(since C11)

Tries to lock the mutex pointed to by mutex without blocking. Returns immediately if the mutex is already locked.

Prior calls to mtx_unlock on the same mutex synchronize-with this operation (if this operation succeeds), and all lock/unlock operations on any given mutex form a single total order (similar to the modification order of an atomic).


mutex - pointer to the mutex to lock

Return value

thrd_success if successful, thrd_busy if the mutex has already been locked or due to a spurious failure to acquire an available mutex, thrd_error if an error occurs.

Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C standards.

DR Applied to Behavior as published Correct behavior
DR 470 C11 mtx_trylock was not allowed to fail spuriously allowed


  • C17 standard (ISO/IEC 9899:2018):
    • The mtx_trylock function (p: 278-279)
  • C11 standard (ISO/IEC 9899:2011):
    • The mtx_trylock function (p: 382)

See also

blocks until locks a mutex
blocks until locks a mutex or times out
unlocks a mutex
C++ documentation for mutex::try_lock
C++ documentation for timed_mutex::try_lock
C++ documentation for recursive_mutex::try_lock
C++ documentation for recursive_timed_mutex::try_lock

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.