[ Compact ]
[ Deprecated ( since = "glib-2.32" , replacement = "Mutex (with --target-glib=2.32)" ) ]
public class Mutex
Warning: Mutex is deprecated. Use "Mutex (with --target-glib=2.32)".
The 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:
intIt is easy to see that this won't work in a multi-threaded application. There current_number must be protected against shared access. A Mutex can be used as a solution to this problem:
give_me_next_number (void)
{
static int current_number = 0;
// now do a very complicated calculation to calculate the new
// number, this might for example be a random number generator
current_number = calc_next_number (current_number);
return current_number;
}
intNotice that the 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.
give_me_next_number (void)
{
static GMutex mutex;
static int current_number = 0;
int ret_val;
g_mutex_lock (&mutex);
ret_val = current_number = calc_next_number (current_number);
g_mutex_unlock (&mutex);
return ret_val;
}
If a Mutex is placed in other contexts (eg: embedded in a struct) then it must be explicitly initialised using
g_mutex_init
.
A Mutex should only be accessed via g_mutex_ functions.