Optionalproperties: Partial<{}>Frees the resources allocated to a mutex with g_mutex_init().
This function should not be used with a GLib.Mutex that has been statically allocated.
Calling g_mutex_clear() on a locked mutex leads to undefined
behaviour.
Initializes a GLib.Mutex so that it can be used.
This function is useful to initialize a mutex that has been allocated on the stack, or as part of a larger structure. It is not necessary to initialize a mutex that has been statically allocated.
typedef struct {
GMutex m;
...
} Blob;
Blob *b;
b = g_new (Blob, 1);
g_mutex_init (&b->m);
To undo the effect of g_mutex_init() when a mutex is no longer
needed, use g_mutex_clear().
Calling g_mutex_init() on an already initialized GLib.Mutex leads
to undefined behaviour.
Locks mutex. If mutex is already locked by another thread, the
current thread will block until mutex is unlocked by the other
thread.
GLib.Mutex is neither guaranteed to be recursive nor to be
non-recursive. As such, calling g_mutex_lock() on a GLib.Mutex that has
already been locked by the same thread results in undefined behaviour
(including but not limited to deadlocks).
Tries to lock mutex. If mutex is already locked by another thread,
it immediately returns false. Otherwise it locks mutex and returns
true.
GLib.Mutex is neither guaranteed to be recursive nor to be
non-recursive. As such, calling g_mutex_lock() on a GLib.Mutex that has
already been locked by the same thread results in undefined behaviour
(including but not limited to deadlocks or arbitrary return values).
true if mutex could be locked
Unlocks mutex. If another thread is blocked in a g_mutex_lock()
call for mutex, it will become unblocked and can lock mutex itself.
Calling g_mutex_unlock() on a mutex that is not locked by the
current thread leads to undefined behaviour.
The GLib.Mutex struct is an opaque data structure to represent a mutex (mutual exclusion). It can be used to protect data against shared access.
Take for example the following function:
It is easy to see that this won't work in a multi-threaded application. There current_number must be protected against shared access. A GLib.Mutex can be used as a solution to this problem:
Notice that the GLib.Mutex is not initialised to any particular value. Its placement in static storage ensures that it will be initialised to all-zeros, which is appropriate.
If a GLib.Mutex is placed in other contexts (eg: embedded in a struct) then it must be explicitly initialised using
g_mutex_init().A GLib.Mutex should only be accessed via g_mutex_ functions.