Github User Fetcher 1.0.0
C Application with Server and GUI
Loading...
Searching...
No Matches
gthread.h File Reference
#include <glib/gatomic.h>
#include <glib/gerror.h>
#include <glib/gutils.h>

Go to the source code of this file.

Data Structures

union  _GMutex
 
struct  _GRWLock
 
struct  _GCond
 
struct  _GRecMutex
 
struct  _GPrivate
 
struct  _GOnce
 

Macros

#define G_THREAD_ERROR   g_thread_error_quark ()
 
#define G_PRIVATE_INIT(notify)   { NULL, (notify), { NULL, NULL } }
 
#define G_ONCE_INIT   { G_ONCE_STATUS_NOTCALLED, NULL }
 
#define G_LOCK_NAME(name)   g__ ## name ## _lock
 
#define G_LOCK_DEFINE_STATIC(name)   static G_LOCK_DEFINE (name)
 
#define G_LOCK_DEFINE(name)   GMutex G_LOCK_NAME (name)
 
#define G_LOCK_EXTERN(name)   extern GMutex G_LOCK_NAME (name)
 
#define G_LOCK(name)   g_mutex_lock (&G_LOCK_NAME (name))
 
#define G_UNLOCK(name)   g_mutex_unlock (&G_LOCK_NAME (name))
 
#define G_TRYLOCK(name)   g_mutex_trylock (&G_LOCK_NAME (name))
 
#define g_once(once, func, arg)   g_once_impl ((once), (func), (arg))
 
#define g_once_init_enter(location)    (g_once_init_enter((location)))
 
#define g_once_init_leave(location, result)    (g_once_init_leave((location), (gsize) (result)))
 
#define g_once_init_enter_pointer(location)
 
#define g_once_init_leave_pointer(location, result)
 

Typedefs

typedef gpointer(* GThreadFunc) (gpointer data)
 
typedef struct _GThread GThread
 
typedef union _GMutex GMutex
 
typedef struct _GRecMutex GRecMutex
 
typedef struct _GRWLock GRWLock
 
typedef struct _GCond GCond
 
typedef struct _GPrivate GPrivate
 
typedef struct _GOnce GOnce
 
typedef void GMutexLocker
 
typedef void GRecMutexLocker
 
typedef void GRWLockWriterLocker
 
typedef void GRWLockReaderLocker
 

Enumerations

enum  GThreadError { G_THREAD_ERROR_AGAIN }
 
enum  GOnceStatus { G_ONCE_STATUS_NOTCALLED , G_ONCE_STATUS_PROGRESS , G_ONCE_STATUS_READY }
 

Functions

GLIB_AVAILABLE_IN_ALL GQuark g_thread_error_quark (void)
 
GLIB_AVAILABLE_IN_2_32 GThreadg_thread_ref (GThread *thread)
 
GLIB_AVAILABLE_IN_2_32 void g_thread_unref (GThread *thread)
 
GLIB_AVAILABLE_IN_2_32 GThreadg_thread_new (const gchar *name, GThreadFunc func, gpointer data)
 
GLIB_AVAILABLE_IN_2_32 GThreadg_thread_try_new (const gchar *name, GThreadFunc func, gpointer data, GError **error)
 
GLIB_AVAILABLE_IN_ALL GThreadg_thread_self (void)
 
G_NORETURN GLIB_AVAILABLE_IN_ALL void g_thread_exit (gpointer retval)
 
GLIB_AVAILABLE_IN_ALL gpointer g_thread_join (GThread *thread)
 
GLIB_AVAILABLE_IN_ALL void g_thread_yield (void)
 
GLIB_AVAILABLE_IN_2_32 void g_mutex_init (GMutex *mutex)
 
GLIB_AVAILABLE_IN_2_32 void g_mutex_clear (GMutex *mutex)
 
GLIB_AVAILABLE_IN_ALL void g_mutex_lock (GMutex *mutex)
 
GLIB_AVAILABLE_IN_ALL gboolean g_mutex_trylock (GMutex *mutex)
 
GLIB_AVAILABLE_IN_ALL void g_mutex_unlock (GMutex *mutex)
 
GLIB_AVAILABLE_IN_2_32 void g_rw_lock_init (GRWLock *rw_lock)
 
GLIB_AVAILABLE_IN_2_32 void g_rw_lock_clear (GRWLock *rw_lock)
 
GLIB_AVAILABLE_IN_2_32 void g_rw_lock_writer_lock (GRWLock *rw_lock)
 
GLIB_AVAILABLE_IN_2_32 gboolean g_rw_lock_writer_trylock (GRWLock *rw_lock)
 
GLIB_AVAILABLE_IN_2_32 void g_rw_lock_writer_unlock (GRWLock *rw_lock)
 
GLIB_AVAILABLE_IN_2_32 void g_rw_lock_reader_lock (GRWLock *rw_lock)
 
GLIB_AVAILABLE_IN_2_32 gboolean g_rw_lock_reader_trylock (GRWLock *rw_lock)
 
GLIB_AVAILABLE_IN_2_32 void g_rw_lock_reader_unlock (GRWLock *rw_lock)
 
GLIB_AVAILABLE_IN_2_32 void g_rec_mutex_init (GRecMutex *rec_mutex)
 
GLIB_AVAILABLE_IN_2_32 void g_rec_mutex_clear (GRecMutex *rec_mutex)
 
GLIB_AVAILABLE_IN_2_32 void g_rec_mutex_lock (GRecMutex *rec_mutex)
 
GLIB_AVAILABLE_IN_2_32 gboolean g_rec_mutex_trylock (GRecMutex *rec_mutex)
 
GLIB_AVAILABLE_IN_2_32 void g_rec_mutex_unlock (GRecMutex *rec_mutex)
 
GLIB_AVAILABLE_IN_2_32 void g_cond_init (GCond *cond)
 
GLIB_AVAILABLE_IN_2_32 void g_cond_clear (GCond *cond)
 
GLIB_AVAILABLE_IN_ALL void g_cond_wait (GCond *cond, GMutex *mutex)
 
GLIB_AVAILABLE_IN_ALL void g_cond_signal (GCond *cond)
 
GLIB_AVAILABLE_IN_ALL void g_cond_broadcast (GCond *cond)
 
GLIB_AVAILABLE_IN_2_32 gboolean g_cond_wait_until (GCond *cond, GMutex *mutex, gint64 end_time)
 
GLIB_AVAILABLE_IN_ALL gpointer g_private_get (GPrivate *key)
 
GLIB_AVAILABLE_IN_ALL void g_private_set (GPrivate *key, gpointer value)
 
GLIB_AVAILABLE_IN_2_32 void g_private_replace (GPrivate *key, gpointer value)
 
GLIB_AVAILABLE_IN_ALL gpointer g_once_impl (GOnce *once, GThreadFunc func, gpointer arg)
 
GLIB_AVAILABLE_IN_ALL gboolean g_once_init_enter (volatile void *location)
 
GLIB_AVAILABLE_IN_ALL void g_once_init_leave (volatile void *location, gsize result)
 
GLIB_AVAILABLE_IN_2_80 gboolean g_once_init_enter_pointer (void *location)
 
GLIB_AVAILABLE_IN_2_80 void g_once_init_leave_pointer (void *location, gpointer result)
 
GLIB_AVAILABLE_IN_2_36 guint g_get_num_processors (void)
 
static GLIB_AVAILABLE_STATIC_INLINE_IN_2_44 GMutexLockerg_mutex_locker_new (GMutex *mutex)
 
static GLIB_AVAILABLE_STATIC_INLINE_IN_2_44 void g_mutex_locker_free (GMutexLocker *locker)
 
G_GNUC_BEGIN_IGNORE_DEPRECATIONS static GLIB_AVAILABLE_STATIC_INLINE_IN_2_60 GRecMutexLockerg_rec_mutex_locker_new (GRecMutex *rec_mutex)
 
G_GNUC_END_IGNORE_DEPRECATIONS G_GNUC_BEGIN_IGNORE_DEPRECATIONS static GLIB_AVAILABLE_STATIC_INLINE_IN_2_60 void g_rec_mutex_locker_free (GRecMutexLocker *locker)
 
G_GNUC_BEGIN_IGNORE_DEPRECATIONS static GLIB_AVAILABLE_STATIC_INLINE_IN_2_62 GRWLockWriterLockerg_rw_lock_writer_locker_new (GRWLock *rw_lock)
 
G_GNUC_END_IGNORE_DEPRECATIONS G_GNUC_BEGIN_IGNORE_DEPRECATIONS static GLIB_AVAILABLE_STATIC_INLINE_IN_2_62 void g_rw_lock_writer_locker_free (GRWLockWriterLocker *locker)
 
G_GNUC_BEGIN_IGNORE_DEPRECATIONS static GLIB_AVAILABLE_STATIC_INLINE_IN_2_62 GRWLockReaderLockerg_rw_lock_reader_locker_new (GRWLock *rw_lock)
 
G_GNUC_END_IGNORE_DEPRECATIONS G_GNUC_BEGIN_IGNORE_DEPRECATIONS static GLIB_AVAILABLE_STATIC_INLINE_IN_2_62 void g_rw_lock_reader_locker_free (GRWLockReaderLocker *locker)
 

Macro Definition Documentation

◆ G_LOCK

◆ G_LOCK_DEFINE

#define G_LOCK_DEFINE ( name)    GMutex G_LOCK_NAME (name)

Definition at line 113 of file gthread.h.

◆ G_LOCK_DEFINE_STATIC

#define G_LOCK_DEFINE_STATIC ( name)    static G_LOCK_DEFINE (name)

Definition at line 112 of file gthread.h.

◆ G_LOCK_EXTERN

#define G_LOCK_EXTERN ( name)    extern GMutex G_LOCK_NAME (name)

Definition at line 114 of file gthread.h.

◆ G_LOCK_NAME

#define G_LOCK_NAME ( name)    g__ ## name ## _lock

Definition at line 111 of file gthread.h.

◆ g_once

#define g_once ( once,
func,
arg )   g_once_impl ((once), (func), (arg))

Definition at line 264 of file gthread.h.

◆ G_ONCE_INIT

#define G_ONCE_INIT   { G_ONCE_STATUS_NOTCALLED, NULL }

Definition at line 104 of file gthread.h.

◆ g_once_init_enter

#define g_once_init_enter ( location)     (g_once_init_enter((location)))

Definition at line 295 of file gthread.h.

295# define g_once_init_enter(location) \
296 (g_once_init_enter((location)))

◆ g_once_init_enter_pointer

#define g_once_init_enter_pointer ( location)
Value:
(g_once_init_enter_pointer((location))) \
#define GLIB_AVAILABLE_MACRO_IN_2_80
#define g_once_init_enter_pointer(location)
Definition gthread.h:299

Definition at line 299 of file gthread.h.

299# define g_once_init_enter_pointer(location) \
300 (g_once_init_enter_pointer((location))) \
301 GLIB_AVAILABLE_MACRO_IN_2_80

◆ g_once_init_leave

#define g_once_init_leave ( location,
result )    (g_once_init_leave((location), (gsize) (result)))

Definition at line 297 of file gthread.h.

297# define g_once_init_leave(location, result) \
298 (g_once_init_leave((location), (gsize) (result)))

◆ g_once_init_leave_pointer

#define g_once_init_leave_pointer ( location,
result )
Value:
(g_once_init_leave_pointer((location), (gpointer) (guintptr) (result))) \
unsigned long guintptr
Definition glibconfig.h:110
#define g_once_init_leave_pointer(location, result)
Definition gthread.h:302
void * gpointer
Definition gtypes.h:109

Definition at line 302 of file gthread.h.

302# define g_once_init_leave_pointer(location, result) \
303 (g_once_init_leave_pointer((location), (gpointer) (guintptr) (result))) \
304 GLIB_AVAILABLE_MACRO_IN_2_80

◆ G_PRIVATE_INIT

#define G_PRIVATE_INIT ( notify)    { NULL, (notify), { NULL, NULL } }

Definition at line 88 of file gthread.h.

◆ G_THREAD_ERROR

#define G_THREAD_ERROR   g_thread_error_quark ()

Definition at line 40 of file gthread.h.

◆ G_TRYLOCK

#define G_TRYLOCK ( name)    g_mutex_trylock (&G_LOCK_NAME (name))

Definition at line 139 of file gthread.h.

◆ G_UNLOCK

Typedef Documentation

◆ GCond

typedef struct _GCond GCond

Definition at line 56 of file gthread.h.

◆ GMutex

typedef union _GMutex GMutex

Definition at line 53 of file gthread.h.

◆ GMutexLocker

typedef void GMutexLocker

GMutexLocker:

Opaque type. See g_mutex_locker_new() for details. Since: 2.44

Definition at line 316 of file gthread.h.

◆ GOnce

typedef struct _GOnce GOnce

Definition at line 58 of file gthread.h.

◆ GPrivate

typedef struct _GPrivate GPrivate

Definition at line 57 of file gthread.h.

◆ GRecMutex

typedef struct _GRecMutex GRecMutex

Definition at line 54 of file gthread.h.

◆ GRecMutexLocker

typedef void GRecMutexLocker

GRecMutexLocker:

Opaque type. See g_rec_mutex_locker_new() for details. Since: 2.60

Definition at line 438 of file gthread.h.

◆ GRWLock

typedef struct _GRWLock GRWLock

Definition at line 55 of file gthread.h.

◆ GRWLockReaderLocker

typedef void GRWLockReaderLocker

GRWLockReaderLocker:

Opaque type. See g_rw_lock_reader_locker_new() for details. Since: 2.62

Definition at line 722 of file gthread.h.

◆ GRWLockWriterLocker

typedef void GRWLockWriterLocker

GRWLockWriterLocker:

Opaque type. See g_rw_lock_writer_locker_new() for details. Since: 2.62

Definition at line 564 of file gthread.h.

◆ GThread

typedef struct _GThread GThread

Definition at line 51 of file gthread.h.

◆ GThreadFunc

typedef gpointer(* GThreadFunc) (gpointer data)

Definition at line 49 of file gthread.h.

Enumeration Type Documentation

◆ GOnceStatus

Enumerator
G_ONCE_STATUS_NOTCALLED 
G_ONCE_STATUS_PROGRESS 
G_ONCE_STATUS_READY 

Definition at line 97 of file gthread.h.

98{
GOnceStatus
Definition gthread.h:98
@ G_ONCE_STATUS_READY
Definition gthread.h:101
@ G_ONCE_STATUS_PROGRESS
Definition gthread.h:100
@ G_ONCE_STATUS_NOTCALLED
Definition gthread.h:99

◆ GThreadError

Enumerator
G_THREAD_ERROR_AGAIN 

Definition at line 44 of file gthread.h.

45{
46 G_THREAD_ERROR_AGAIN /* Resource temporarily unavailable */
GThreadError
Definition gthread.h:45
@ G_THREAD_ERROR_AGAIN
Definition gthread.h:46

Function Documentation

◆ g_cond_broadcast()

GLIB_AVAILABLE_IN_ALL void g_cond_broadcast ( GCond * cond)

◆ g_cond_clear()

GLIB_AVAILABLE_IN_2_32 void g_cond_clear ( GCond * cond)

◆ g_cond_init()

GLIB_AVAILABLE_IN_2_32 void g_cond_init ( GCond * cond)

◆ g_cond_signal()

GLIB_AVAILABLE_IN_ALL void g_cond_signal ( GCond * cond)

◆ g_cond_wait()

GLIB_AVAILABLE_IN_ALL void g_cond_wait ( GCond * cond,
GMutex * mutex )

◆ g_cond_wait_until()

GLIB_AVAILABLE_IN_2_32 gboolean g_cond_wait_until ( GCond * cond,
GMutex * mutex,
gint64 end_time )

◆ g_get_num_processors()

GLIB_AVAILABLE_IN_2_36 guint g_get_num_processors ( void )

◆ g_mutex_clear()

GLIB_AVAILABLE_IN_2_32 void g_mutex_clear ( GMutex * mutex)

◆ g_mutex_init()

GLIB_AVAILABLE_IN_2_32 void g_mutex_init ( GMutex * mutex)

◆ g_mutex_lock()

GLIB_AVAILABLE_IN_ALL void g_mutex_lock ( GMutex * mutex)

Referenced by g_mutex_locker_new().

◆ g_mutex_locker_free()

static GLIB_AVAILABLE_STATIC_INLINE_IN_2_44 void g_mutex_locker_free ( GMutexLocker * locker)
inlinestatic

g_mutex_locker_free: @locker: a GMutexLocker

Unlock @locker's mutex. See g_mutex_locker_new() for details.

No memory is freed, it is equivalent to a g_mutex_unlock() call.

Since: 2.44

Definition at line 384 of file gthread.h.

385{
386 g_mutex_unlock ((GMutex *) locker);
387}
GLIB_AVAILABLE_IN_ALL void g_mutex_unlock(GMutex *mutex)

References g_mutex_unlock().

◆ g_mutex_locker_new()

static GLIB_AVAILABLE_STATIC_INLINE_IN_2_44 GMutexLocker * g_mutex_locker_new ( GMutex * mutex)
inlinestatic

g_mutex_locker_new: @mutex: a mutex to lock

Lock @mutex and return a new GMutexLocker. Unlock with g_mutex_locker_free(). Using g_mutex_unlock() on @mutex while a GMutexLocker exists can lead to undefined behaviour.

No allocation is performed, it is equivalent to a g_mutex_lock() call.

This is intended to be used with g_autoptr(). Note that g_autoptr() is only available when using GCC or clang, so the following example will only work with those compilers: |[ typedef struct { ... GMutex mutex; ... } MyObject;

static void my_object_do_stuff (MyObject *self) { g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&self->mutex);

// Code with mutex locked here

if (condition) // No need to unlock return;

// Optionally early unlock g_clear_pointer (&locker, g_mutex_locker_free);

// Code with mutex unlocked here } ]|

Note that it is common for the declared variable to not be used in the scope, which causes some compilers to warn. That can be avoided by using G_GNUC_UNUSED or, since 2.80, [func@.nosp@m.GLib.nosp@m..MUTE.nosp@m.X_AU.nosp@m.TO_LO.nosp@m.CK].

Returns: a GMutexLocker Since: 2.44

Definition at line 366 of file gthread.h.

367{
369 return (GMutexLocker *) mutex;
370}
GStaticMutex mutex
void GMutexLocker
Definition gthread.h:316
GLIB_AVAILABLE_IN_ALL void g_mutex_lock(GMutex *mutex)

References g_mutex_lock(), and mutex.

◆ g_mutex_trylock()

GLIB_AVAILABLE_IN_ALL gboolean g_mutex_trylock ( GMutex * mutex)

◆ g_mutex_unlock()

GLIB_AVAILABLE_IN_ALL void g_mutex_unlock ( GMutex * mutex)

Referenced by g_mutex_locker_free().

◆ g_once_impl()

GLIB_AVAILABLE_IN_ALL gpointer g_once_impl ( GOnce * once,
GThreadFunc func,
gpointer arg )

◆ g_once_init_enter()

GLIB_AVAILABLE_IN_ALL gboolean g_once_init_enter ( volatile void * location)

◆ g_once_init_enter_pointer()

GLIB_AVAILABLE_IN_2_80 gboolean g_once_init_enter_pointer ( void * location)

◆ g_once_init_leave()

GLIB_AVAILABLE_IN_ALL void g_once_init_leave ( volatile void * location,
gsize result )

◆ g_once_init_leave_pointer()

GLIB_AVAILABLE_IN_2_80 void g_once_init_leave_pointer ( void * location,
gpointer result )

◆ g_private_get()

GLIB_AVAILABLE_IN_ALL gpointer g_private_get ( GPrivate * key)

◆ g_private_replace()

GLIB_AVAILABLE_IN_2_32 void g_private_replace ( GPrivate * key,
gpointer value )

◆ g_private_set()

GLIB_AVAILABLE_IN_ALL void g_private_set ( GPrivate * key,
gpointer value )

◆ g_rec_mutex_clear()

GLIB_AVAILABLE_IN_2_32 void g_rec_mutex_clear ( GRecMutex * rec_mutex)

◆ g_rec_mutex_init()

GLIB_AVAILABLE_IN_2_32 void g_rec_mutex_init ( GRecMutex * rec_mutex)

◆ g_rec_mutex_lock()

GLIB_AVAILABLE_IN_2_32 void g_rec_mutex_lock ( GRecMutex * rec_mutex)

Referenced by g_rec_mutex_locker_new().

◆ g_rec_mutex_locker_free()

g_rec_mutex_locker_free: @locker: a GRecMutexLocker

Unlock @locker's recursive mutex. See g_rec_mutex_locker_new() for details.

No memory is freed, it is equivalent to a g_rec_mutex_unlock() call.

Since: 2.60

Definition at line 509 of file gthread.h.

510{
511 g_rec_mutex_unlock ((GRecMutex *) locker);
512}
GLIB_AVAILABLE_IN_2_32 void g_rec_mutex_unlock(GRecMutex *rec_mutex)

References g_rec_mutex_unlock().

◆ g_rec_mutex_locker_new()

G_GNUC_BEGIN_IGNORE_DEPRECATIONS static GLIB_AVAILABLE_STATIC_INLINE_IN_2_60 GRecMutexLocker * g_rec_mutex_locker_new ( GRecMutex * rec_mutex)
inlinestatic

g_rec_mutex_locker_new: @rec_mutex: a recursive mutex to lock

Lock @rec_mutex and return a new GRecMutexLocker. Unlock with g_rec_mutex_locker_free(). Using g_rec_mutex_unlock() on @rec_mutex while a GRecMutexLocker exists can lead to undefined behaviour.

No allocation is performed, it is equivalent to a g_rec_mutex_lock() call.

This is intended to be used with g_autoptr(). Note that g_autoptr() is only available when using GCC or clang, so the following example will only work with those compilers: |[ typedef struct { ... GRecMutex rec_mutex; ... } MyObject;

static void my_object_do_stuff (MyObject *self) { g_autoptr(GRecMutexLocker) locker = g_rec_mutex_locker_new (&self->rec_mutex);

// Code with rec_mutex locked here

if (condition) // No need to unlock return;

// Optionally early unlock g_clear_pointer (&locker, g_rec_mutex_locker_free);

// Code with rec_mutex unlocked here } ]|

Note that it is common for the declared variable to not be used in the scope, which causes some compilers to warn. That can be avoided by using G_GNUC_UNUSED or, since 2.80, [func@.nosp@m.GLib.nosp@m..REC_.nosp@m.MUTE.nosp@m.X_AUT.nosp@m.O_LO.nosp@m.CK].

Returns: a GRecMutexLocker Since: 2.60

Definition at line 489 of file gthread.h.

490{
491 g_rec_mutex_lock (rec_mutex);
492 return (GRecMutexLocker *) rec_mutex;
493}
GLIB_AVAILABLE_IN_2_32 void g_rec_mutex_lock(GRecMutex *rec_mutex)
void GRecMutexLocker
Definition gthread.h:438

References g_rec_mutex_lock().

◆ g_rec_mutex_trylock()

GLIB_AVAILABLE_IN_2_32 gboolean g_rec_mutex_trylock ( GRecMutex * rec_mutex)

◆ g_rec_mutex_unlock()

GLIB_AVAILABLE_IN_2_32 void g_rec_mutex_unlock ( GRecMutex * rec_mutex)

Referenced by g_rec_mutex_locker_free().

◆ g_rw_lock_clear()

GLIB_AVAILABLE_IN_2_32 void g_rw_lock_clear ( GRWLock * rw_lock)

◆ g_rw_lock_init()

GLIB_AVAILABLE_IN_2_32 void g_rw_lock_init ( GRWLock * rw_lock)

◆ g_rw_lock_reader_lock()

GLIB_AVAILABLE_IN_2_32 void g_rw_lock_reader_lock ( GRWLock * rw_lock)

◆ g_rw_lock_reader_locker_free()

g_rw_lock_reader_locker_free: @locker: a GRWLockReaderLocker

Release a read lock on @locker's read-write lock. See g_rw_lock_reader_locker_new() for details.

No memory is freed, it is equivalent to a g_rw_lock_reader_unlock() call.

Since: 2.62

Definition at line 765 of file gthread.h.

766{
767 g_rw_lock_reader_unlock ((GRWLock *) locker);
768}
GLIB_AVAILABLE_IN_2_32 void g_rw_lock_reader_unlock(GRWLock *rw_lock)

References g_rw_lock_reader_unlock().

◆ g_rw_lock_reader_locker_new()

G_GNUC_BEGIN_IGNORE_DEPRECATIONS static GLIB_AVAILABLE_STATIC_INLINE_IN_2_62 GRWLockReaderLocker * g_rw_lock_reader_locker_new ( GRWLock * rw_lock)
inlinestatic

g_rw_lock_reader_locker_new: @rw_lock: a GRWLock

Obtain a read lock on @rw_lock and return a new GRWLockReaderLocker. Unlock with g_rw_lock_reader_locker_free(). Using g_rw_lock_reader_unlock() on @rw_lock while a GRWLockReaderLocker exists can lead to undefined behaviour.

No allocation is performed, it is equivalent to a g_rw_lock_reader_lock() call.

This is intended to be used with g_autoptr(). For a code sample, see g_rw_lock_writer_locker_new().

Returns: a GRWLockReaderLocker Since: 2.62

Definition at line 744 of file gthread.h.

745{
746 g_rw_lock_reader_lock (rw_lock);
747 return (GRWLockReaderLocker *) rw_lock;
748}
GLIB_AVAILABLE_IN_2_32 void g_rw_lock_reader_lock(GRWLock *rw_lock)
void GRWLockReaderLocker
Definition gthread.h:722

References g_rw_lock_reader_lock().

◆ g_rw_lock_reader_trylock()

GLIB_AVAILABLE_IN_2_32 gboolean g_rw_lock_reader_trylock ( GRWLock * rw_lock)

◆ g_rw_lock_reader_unlock()

GLIB_AVAILABLE_IN_2_32 void g_rw_lock_reader_unlock ( GRWLock * rw_lock)

◆ g_rw_lock_writer_lock()

GLIB_AVAILABLE_IN_2_32 void g_rw_lock_writer_lock ( GRWLock * rw_lock)

◆ g_rw_lock_writer_locker_free()

g_rw_lock_writer_locker_free: @locker: a GRWLockWriterLocker

Release a write lock on @locker's read-write lock. See g_rw_lock_writer_locker_new() for details.

No memory is freed, it is equivalent to a g_rw_lock_writer_unlock() call.

Since: 2.62

Definition at line 667 of file gthread.h.

668{
669 g_rw_lock_writer_unlock ((GRWLock *) locker);
670}
GLIB_AVAILABLE_IN_2_32 void g_rw_lock_writer_unlock(GRWLock *rw_lock)

References g_rw_lock_writer_unlock().

◆ g_rw_lock_writer_locker_new()

G_GNUC_BEGIN_IGNORE_DEPRECATIONS static GLIB_AVAILABLE_STATIC_INLINE_IN_2_62 GRWLockWriterLocker * g_rw_lock_writer_locker_new ( GRWLock * rw_lock)
inlinestatic

g_rw_lock_writer_locker_new: @rw_lock: a GRWLock

Obtain a write lock on @rw_lock and return a new GRWLockWriterLocker. Unlock with g_rw_lock_writer_locker_free(). Using g_rw_lock_writer_unlock() on @rw_lock while a GRWLockWriterLocker exists can lead to undefined behaviour.

No allocation is performed, it is equivalent to a g_rw_lock_writer_lock() call.

This is intended to be used with g_autoptr(). Note that g_autoptr() is only available when using GCC or clang, so the following example will only work with those compilers: |[ typedef struct { ... GRWLock rw_lock; GPtrArray *array; ... } MyObject;

static gchar * my_object_get_data (MyObject *self, guint index) { g_autoptr(GRWLockReaderLocker) locker = g_rw_lock_reader_locker_new (&self->rw_lock);

// Code with a read lock obtained on rw_lock here

if (self->array == NULL) // No need to unlock return NULL;

if (index < self->array->len) // No need to unlock return g_ptr_array_index (self->array, index);

// Optionally early unlock g_clear_pointer (&locker, g_rw_lock_reader_locker_free);

// Code with rw_lock unlocked here return NULL; }

static void my_object_set_data (MyObject *self, guint index, gpointer data) { g_autoptr(GRWLockWriterLocker) locker = g_rw_lock_writer_locker_new (&self->rw_lock);

// Code with a write lock obtained on rw_lock here

if (self->array == NULL) self->array = g_ptr_array_new ();

if (condition) // No need to unlock return;

if (index >= self->array->len) g_ptr_array_set_size (self->array, index+1); g_ptr_array_index (self->array, index) = data;

// Optionally early unlock g_clear_pointer (&locker, g_rw_lock_writer_locker_free);

// Code with rw_lock unlocked here } ]|

Note that it is common for the declared variable to not be used in the scope, which causes some compilers to warn. That can be avoided by using G_GNUC_UNUSED or, since 2.80, [func@.nosp@m.GLib.nosp@m..RW_L.nosp@m.OCK_.nosp@m.WRITE.nosp@m.R_AU.nosp@m.TO_LO.nosp@m.CK].

Returns: a GRWLockWriterLocker Since: 2.62

Definition at line 646 of file gthread.h.

647{
648 g_rw_lock_writer_lock (rw_lock);
649 return (GRWLockWriterLocker *) rw_lock;
650}
GLIB_AVAILABLE_IN_2_32 void g_rw_lock_writer_lock(GRWLock *rw_lock)
void GRWLockWriterLocker
Definition gthread.h:564

References g_rw_lock_writer_lock().

◆ g_rw_lock_writer_trylock()

GLIB_AVAILABLE_IN_2_32 gboolean g_rw_lock_writer_trylock ( GRWLock * rw_lock)

◆ g_rw_lock_writer_unlock()

GLIB_AVAILABLE_IN_2_32 void g_rw_lock_writer_unlock ( GRWLock * rw_lock)

◆ g_thread_error_quark()

GLIB_AVAILABLE_IN_ALL GQuark g_thread_error_quark ( void )

◆ g_thread_exit()

G_NORETURN GLIB_AVAILABLE_IN_ALL void g_thread_exit ( gpointer retval)

◆ g_thread_join()

GLIB_AVAILABLE_IN_ALL gpointer g_thread_join ( GThread * thread)

◆ g_thread_new()

GLIB_AVAILABLE_IN_2_32 GThread * g_thread_new ( const gchar * name,
GThreadFunc func,
gpointer data )

◆ g_thread_ref()

GLIB_AVAILABLE_IN_2_32 GThread * g_thread_ref ( GThread * thread)

◆ g_thread_self()

GLIB_AVAILABLE_IN_ALL GThread * g_thread_self ( void )

◆ g_thread_try_new()

GLIB_AVAILABLE_IN_2_32 GThread * g_thread_try_new ( const gchar * name,
GThreadFunc func,
gpointer data,
GError ** error )

◆ g_thread_unref()

GLIB_AVAILABLE_IN_2_32 void g_thread_unref ( GThread * thread)

◆ g_thread_yield()

GLIB_AVAILABLE_IN_ALL void g_thread_yield ( void )