mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-04-25 16:46:52 +02:00
Add GRWLock
This commit is contained in:
parent
42af8eb39d
commit
3d4102776e
@ -1616,3 +1616,11 @@ g_mutex_unlock
|
|||||||
g_private_new
|
g_private_new
|
||||||
g_private_get
|
g_private_get
|
||||||
g_private_set
|
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;
|
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 */
|
/* {{{1 GCond */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -154,6 +154,57 @@ g_mutex_unlock (GMutex *mutex)
|
|||||||
g_thread_impl_vtable.ReleaseSRWLockExclusive (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 */
|
/* {{{1 GCond */
|
||||||
void
|
void
|
||||||
g_cond_init (GCond *cond)
|
g_cond_init (GCond *cond)
|
||||||
|
@ -53,6 +53,7 @@ typedef gpointer (*GThreadFunc) (gpointer data);
|
|||||||
typedef struct _GThread GThread;
|
typedef struct _GThread GThread;
|
||||||
|
|
||||||
typedef struct _GMutex GMutex;
|
typedef struct _GMutex GMutex;
|
||||||
|
typedef struct _GRWLock GRWLock;
|
||||||
typedef struct _GCond GCond;
|
typedef struct _GCond GCond;
|
||||||
typedef struct _GPrivate GPrivate;
|
typedef struct _GPrivate GPrivate;
|
||||||
typedef struct _GStaticPrivate GStaticPrivate;
|
typedef struct _GStaticPrivate GStaticPrivate;
|
||||||
@ -65,6 +66,12 @@ struct _GMutex
|
|||||||
gpointer impl;
|
gpointer impl;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define G_RW_LOCK_INIT { NULL }
|
||||||
|
struct _GRWLock
|
||||||
|
{
|
||||||
|
gpointer impl;
|
||||||
|
};
|
||||||
|
|
||||||
#define G_COND_INIT { NULL }
|
#define G_COND_INIT { NULL }
|
||||||
struct _GCond
|
struct _GCond
|
||||||
{
|
{
|
||||||
@ -80,6 +87,12 @@ struct _GMutex
|
|||||||
pthread_mutex_t impl;
|
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 }
|
#define G_COND_INIT { PTHREAD_COND_INITIALIZER }
|
||||||
struct _GCond
|
struct _GCond
|
||||||
{
|
{
|
||||||
@ -292,6 +305,15 @@ void g_mutex_lock (GMutex
|
|||||||
void g_mutex_unlock (GMutex *mutex);
|
void g_mutex_unlock (GMutex *mutex);
|
||||||
gboolean g_mutex_trylock (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);
|
GCond * g_cond_new (void);
|
||||||
void g_cond_free (GCond *cond);
|
void g_cond_free (GCond *cond);
|
||||||
void g_cond_init (GCond *cond);
|
void g_cond_init (GCond *cond);
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
* if advised of the possibility of such damage.
|
* if advised of the possibility of such damage.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define _XOPEN_SOURCE
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user