Class StaticMutex
- All Implemented Interfaces:
Proxy
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 Summary
ConstructorDescriptionAllocate a new StaticMutex.StaticMutex
(Arena arena) Allocate a new StaticMutex.StaticMutex
(MemorySegment address) Create a StaticMutex proxy instance for the provided memory address.StaticMutex
(Mutex mutex) Allocate a new StaticMutex with the fields set to the provided values.StaticMutex
(Mutex mutex, Arena arena) Allocate a new StaticMutex with the fields set to the provided values. -
Method Summary
Modifier and TypeMethodDescriptionvoid
free()
Deprecated.Use g_mutex_clear()static MemoryLayout
The memory layout of the native struct.void
init()
Deprecated.Use g_mutex_init()Read the value of the fieldmutex
.void
writeMutex
(Mutex mutex) Write a value in the fieldmutex
.Methods inherited from class io.github.jwharm.javagi.base.ProxyInstance
equals, handle, hashCode
-
Constructor Details
-
StaticMutex
Create a StaticMutex proxy instance for the provided memory address.- Parameters:
address
- the memory address of the native object
-
StaticMutex
Allocate a new StaticMutex.- Parameters:
arena
- to control the memory allocation scope
-
StaticMutex
public StaticMutex()Allocate a new StaticMutex. The memory is allocated withArena.ofAuto()
. -
StaticMutex
-
StaticMutex
Allocate a new StaticMutex with the fields set to the provided values. The memory is allocated withArena.ofAuto()
.- Parameters:
mutex
- value for the fieldmutex
-
-
Method Details
-
getMemoryLayout
The memory layout of the native struct.- Returns:
- the memory layout
-
readMutex
-
writeMutex
Write a value in the fieldmutex
.- Parameters:
mutex
- The new value for the fieldmutex
-
free
Deprecated.Use g_mutex_clear()Releases all resources allocated to this StaticMutex.You don't have to call this functions for a
GStaticMutex
with an unbounded lifetime, i.e. objects declared 'static', but if you have aGStaticMutex
as a member of a structure and the structure is freed, you should also free theGStaticMutex
.Calling g_static_mutex_free() on a locked mutex may result in undefined behaviour.
-
getMutexImpl
-
init
Deprecated.Use g_mutex_init()Initializes this StaticMutex. Alternatively you can initialize it withG_STATIC_MUTEX_INIT
.
-