Class StaticMutex

All Implemented Interfaces:
Proxy

@Generated("org.javagi.JavaGI") public class StaticMutex extends ProxyInstance

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.

  • Constructor Details

    • StaticMutex

      public StaticMutex(MemorySegment address)
      Create a StaticMutex proxy instance for the provided memory address.
      Parameters:
      address - the memory address of the native object
    • StaticMutex

      public StaticMutex(Arena arena)
      Allocate a new StaticMutex.
      Parameters:
      arena - to control the memory allocation scope
    • StaticMutex

      public StaticMutex()
      Allocate a new StaticMutex. The memory is allocated with Arena.ofAuto().
    • StaticMutex

      public StaticMutex(Mutex mutex, Arena arena)
      Allocate a new StaticMutex with the fields set to the provided values.
      Parameters:
      mutex - value for the field mutex
      arena - to control the memory allocation scope
    • StaticMutex

      public StaticMutex(Mutex mutex)
      Allocate a new StaticMutex with the fields set to the provided values. The memory is allocated with Arena.ofAuto().
      Parameters:
      mutex - value for the field mutex
  • Method Details

    • getMemoryLayout

      public static MemoryLayout getMemoryLayout()
      The memory layout of the native struct.
      Returns:
      the memory layout
    • readMutex

      public Mutex readMutex()
      Read the value of the field mutex.
      Returns:
      The value of the field mutex
    • writeMutex

      public void writeMutex(Mutex mutex)
      Write a value in the field mutex.
      Parameters:
      mutex - The new value for the field mutex
    • free

      @Deprecated public void free()
      Deprecated.
      Use g_mutex_clear()

      Releases all resources allocated to mutex.

      You don't have to call this functions for a GStaticMutex with an unbounded lifetime, i.e. objects declared 'static', but if you have a GStaticMutex as a member of a structure and the structure is freed, you should also free the GStaticMutex.

      Calling g_static_mutex_free() on a locked mutex may result in undefined behaviour.

    • getMutexImpl

      public Mutex getMutexImpl()
    • init

      @Deprecated public void init()
      Deprecated.
      Use g_mutex_init()
      Initializes mutex. Alternatively you can initialize it with G_STATIC_MUTEX_INIT.