### Struct

# GLib StaticMutex

#### Description [src]

    struct GStaticMutex {
      GMutex* mutex;
    }

A `GStaticMutex` works like a `GMutex`.

Prior to GLib 2.32, GStaticMutex had the significant advantage that it doesn’t need to be created at run-time, but can be defined at compile-time. Since 2.32, `GMutex` can be statically allocated as well, and GStaticMutex has been deprecated.

Here is a version of our `give_me_next_number()` example using a GStaticMutex:

      int
      give_me_next_number (void)
      {
        static int current_number = 0;
        int ret_val;
        static GStaticMutex mutex = G_STATIC_MUTEX_INIT;

        g_static_mutex_lock (&mutex);
        ret_val = current_number = calc_next_number (current_number);
        g_static_mutex_unlock (&mutex);

        return ret_val;
      }

Sometimes you would like to dynamically create a mutex. If you don’t want to require prior calling to g_thread_init(), because your code should also be usable in non-threaded programs, you are not able to use `g_mutex_new()` and thus `GMutex`, as that requires a prior call to g_thread_init(). In these cases you can also use a `GStaticMutex`. It must be initialized with `g_static_mutex_init()` before using it and freed with with `g_static_mutex_free()` when not needed anymore to free up any allocated resources.

Even though `GStaticMutex` is not opaque, it should only be used with the following functions, as it is defined differently on different platforms.

All of the g_static_mutex_* functions apart from `g_static_mutex_get_mutex()` can also be used even if `g_thread_init()` has not yet been called. Then they do nothing, apart from `g_static_mutex_trylock()` which does nothing but returning `TRUE`.

All of the g_static_mutex_* functions are actually macros. Apart from taking their addresses, you can however use them as if they were functions.

###### Structure members

`mutex:` `GMutex`

  No description available.

#### Instance methods

###### g_static_mutex_free

Releases all resources allocated to `mutex`.

deprecated: 2.32

###### g_static_mutex_get_mutex_impl

No description available.

###### g_static_mutex_init

Initializes `mutex`. Alternatively you can initialize it with `G_STATIC_MUTEX_INIT`.

deprecated: 2.32