mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-24 11:12:11 +01:00
Add GRWLock
This commit is contained in:
parent
42af8eb39d
commit
3d4102776e
@ -1616,3 +1616,11 @@ g_mutex_unlock
|
||||
g_private_new
|
||||
g_private_get
|
||||
g_private_set
|
||||
g_rw_lock_clear
|
||||
g_rw_lock_init
|
||||
g_rw_lock_reader_lock
|
||||
g_rw_lock_reader_trylock
|
||||
g_rw_lock_reader_unlock
|
||||
g_rw_lock_writer_lock
|
||||
g_rw_lock_writer_trylock
|
||||
g_rw_lock_writer_unlock
|
||||
|
@ -197,6 +197,56 @@ g_mutex_trylock (GMutex *mutex)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* {{{1 GRWLock */
|
||||
|
||||
void
|
||||
g_rw_lock_init (GRWLock *lock)
|
||||
{
|
||||
pthread_rwlock_init (&lock->impl, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
g_rw_lock_clear (GRWLock *lock)
|
||||
{
|
||||
pthread_rwlock_destroy (&lock->impl);
|
||||
}
|
||||
|
||||
void
|
||||
g_rw_lock_writer_lock (GRWLock *lock)
|
||||
{
|
||||
pthread_rwlock_wrlock (&lock->impl);
|
||||
}
|
||||
|
||||
gboolean
|
||||
g_rw_lock_writer_trylock (GRWLock *lock)
|
||||
{
|
||||
return pthread_rwlock_trywrlock (&lock->impl);
|
||||
}
|
||||
|
||||
void
|
||||
g_rw_lock_writer_unlock (GRWLock *lock)
|
||||
{
|
||||
pthread_rwlock_unlock (&lock->impl);
|
||||
}
|
||||
|
||||
void
|
||||
g_rw_lock_reader_lock (GRWLock *lock)
|
||||
{
|
||||
pthread_rwlock_rdlock (&lock->impl);
|
||||
}
|
||||
|
||||
gboolean
|
||||
g_rw_lock_reader_trylock (GRWLock *lock)
|
||||
{
|
||||
return pthread_rwlock_tryrdlock (&lock->impl);
|
||||
}
|
||||
|
||||
void
|
||||
g_rw_lock_reader_unlock (GRWLock *lock)
|
||||
{
|
||||
pthread_rwlock_unlock (&lock->impl);
|
||||
}
|
||||
|
||||
/* {{{1 GCond */
|
||||
|
||||
/**
|
||||
|
@ -154,6 +154,57 @@ g_mutex_unlock (GMutex *mutex)
|
||||
g_thread_impl_vtable.ReleaseSRWLockExclusive (mutex);
|
||||
}
|
||||
|
||||
/* {{{1 GRWLock */
|
||||
|
||||
void
|
||||
g_rw_lock_init (GRWLock *lock)
|
||||
{
|
||||
g_thread_impl_vtable.InitializeSRWLock (lock);
|
||||
}
|
||||
|
||||
void
|
||||
g_rw_lock_clear (GRWLock *lock)
|
||||
{
|
||||
if (g_thread_impl_vtable.DeleteSRWLock != NULL)
|
||||
g_thread_impl_vtable.DeleteSRWLock (lock);
|
||||
}
|
||||
|
||||
void
|
||||
g_rw_lock_writer_lock (GRWLock *lock)
|
||||
{
|
||||
g_thread_impl_vtable.AcquireSRWLockExclusive (lock);
|
||||
}
|
||||
|
||||
gboolean
|
||||
g_rw_lock_writer_trylock (GRWLock *lock)
|
||||
{
|
||||
return g_thread_impl_vtable.TryAcquireSRWLockExclusive (lock);
|
||||
}
|
||||
|
||||
void
|
||||
g_rw_lock_writer_unlock (GRWLock *lock)
|
||||
{
|
||||
g_thread_impl_vtable.ReleaseSRWLockExclusive (lock);
|
||||
}
|
||||
|
||||
void
|
||||
g_rw_lock_reader_lock (GRWLock *lock)
|
||||
{
|
||||
g_thread_impl_vtable.AcquireSRWLockShared (lock);
|
||||
}
|
||||
|
||||
gboolean
|
||||
g_rw_lock_reader_trylock (GRWLock *lock)
|
||||
{
|
||||
return g_thread_impl_vtable.TryAcquireSRWLockShared (lock);
|
||||
}
|
||||
|
||||
void
|
||||
g_rw_lock_reader_unlock (GRWLock *lock)
|
||||
{
|
||||
g_thread_impl_vtable.ReleaseSRWLockShared (lock);
|
||||
}
|
||||
|
||||
/* {{{1 GCond */
|
||||
void
|
||||
g_cond_init (GCond *cond)
|
||||
|
@ -53,6 +53,7 @@ typedef gpointer (*GThreadFunc) (gpointer data);
|
||||
typedef struct _GThread GThread;
|
||||
|
||||
typedef struct _GMutex GMutex;
|
||||
typedef struct _GRWLock GRWLock;
|
||||
typedef struct _GCond GCond;
|
||||
typedef struct _GPrivate GPrivate;
|
||||
typedef struct _GStaticPrivate GStaticPrivate;
|
||||
@ -62,13 +63,19 @@ typedef struct _GStaticPrivate GStaticPrivate;
|
||||
#define G_MUTEX_INIT { NULL }
|
||||
struct _GMutex
|
||||
{
|
||||
gpointer impl;
|
||||
gpointer impl;
|
||||
};
|
||||
|
||||
#define G_RW_LOCK_INIT { NULL }
|
||||
struct _GRWLock
|
||||
{
|
||||
gpointer impl;
|
||||
};
|
||||
|
||||
#define G_COND_INIT { NULL }
|
||||
struct _GCond
|
||||
{
|
||||
gpointer impl;
|
||||
gpointer impl;
|
||||
};
|
||||
#else
|
||||
|
||||
@ -80,6 +87,12 @@ struct _GMutex
|
||||
pthread_mutex_t impl;
|
||||
};
|
||||
|
||||
#define G_RW_LOCK_INIT { PTHREAD_RWLOCK_INITIALIZER }
|
||||
struct _GRWLock
|
||||
{
|
||||
pthread_rwlock_t impl;
|
||||
};
|
||||
|
||||
#define G_COND_INIT { PTHREAD_COND_INITIALIZER }
|
||||
struct _GCond
|
||||
{
|
||||
@ -292,6 +305,15 @@ void g_mutex_lock (GMutex
|
||||
void g_mutex_unlock (GMutex *mutex);
|
||||
gboolean g_mutex_trylock (GMutex *mutex);
|
||||
|
||||
void g_rw_lock_init (GRWLock *lock);
|
||||
void g_rw_lock_clear (GRWLock *lock);
|
||||
void g_rw_lock_writer_lock (GRWLock *lock);
|
||||
gboolean g_rw_lock_writer_trylock (GRWLock *lock);
|
||||
void g_rw_lock_writer_unlock (GRWLock *lock);
|
||||
void g_rw_lock_reader_lock (GRWLock *lock);
|
||||
gboolean g_rw_lock_reader_trylock (GRWLock *lock);
|
||||
void g_rw_lock_reader_unlock (GRWLock *lock);
|
||||
|
||||
GCond * g_cond_new (void);
|
||||
void g_cond_free (GCond *cond);
|
||||
void g_cond_init (GCond *cond);
|
||||
|
@ -19,7 +19,6 @@
|
||||
* if advised of the possibility of such damage.
|
||||
*/
|
||||
|
||||
#define _XOPEN_SOURCE
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <locale.h>
|
||||
|
Loading…
x
Reference in New Issue
Block a user