Mutex

The #GMutex 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: |[<!-- language="C" --> int 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; } ]| 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 #GMutex can be used as a solution to this problem: |[<!-- language="C" --> int 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; } ]| Notice that the #GMutex 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 #GMutex is placed in other contexts (eg: embedded in a struct) then it must be explicitly initialised using g_mutex_init().

A #GMutex should only be accessed via g_mutex_ functions.

Constructors

this
this(GMutex* gMutex, bool ownedRef)

Sets our main struct and passes it to the parent class.

Members

Functions

clear
void clear()

Frees the resources allocated to a mutex with g_mutex_init().

getMutexStruct
GMutex* getMutexStruct(bool transferOwnership)

Get the main Gtk struct

getStruct
void* getStruct()

the main Gtk struct as a void*

init
void init()

Initializes a #GMutex so that it can be used.

lock
void lock()

Locks @mutex. If @mutex is already locked by another thread, the current thread will block until @mutex is unlocked by the other thread.

trylock
bool trylock()

Tries to lock @mutex. If @mutex is already locked by another thread, it immediately returns %FALSE. Otherwise it locks @mutex and returns %TRUE.

unlock
void unlock()

Unlocks @mutex. If another thread is blocked in a g_mutex_lock() call for @mutex, it will become unblocked and can lock @mutex itself.

Variables

gMutex
GMutex* gMutex;

the main Gtk struct

ownedRef
bool ownedRef;
Undocumented in source.

Meta