From 9031537658e89136c6a5bb959f9b9a4338a5d056 Mon Sep 17 00:00:00 2001 From: rpj Date: Wed, 15 Sep 1999 00:56:21 +0000 Subject: Sat Sep 10 12:56:13 1999 Ross Johnson The following code for POSIX read/write locks was contributed by Aurelio Medina. * implement.h (pthread_rwlock_t_): Add. * pthread.h (pthread_rwlock_t): Add. (PTHREAD_RWLOCK_INITIALIZER): Add. Add rwlock function prototypes. * rwlock.c: New module. * pthread.def: Add new rwlock functions. * private.c (_pthread_processInitialize): initialise _pthread_rwlock_test_init_lock critical section. * global.c (_pthread_rwlock_test_init_lock): Add. * mutex.c (pthread_mutex_destroy): Don't free mutex memory if mutex is PTHREAD_MUTEX_INITIALIZER and has not been initialised yet. tests/ChangeLog Sep 15 1999 Ross Johnson * rwlock1.c: New test. * rwlock2.c: New test. * rwlock3.c: New test. * rwlock4.c: New test. --- pthread.h | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'pthread.h') diff --git a/pthread.h b/pthread.h index af982b3..ebf9854 100644 --- a/pthread.h +++ b/pthread.h @@ -122,6 +122,17 @@ * --------------------------- * pthread_sigmask * + * --------------------------- + * Read/Write Locks: + * --------------------------- + * pthread_rwlock_init + * pthread_rwlock_destroy + * pthread_rwlock_tryrdlock + * pthread_rwlock_trywrlock + * pthread_rwlock_rdlock + * pthread_rwlock_rwlock + * pthread_rwlock_unlock + * * Limitations * =========== * The following functions are not implemented: @@ -418,6 +429,8 @@ typedef struct pthread_mutex_t_ *pthread_mutex_t; typedef struct pthread_mutexattr_t_ *pthread_mutexattr_t; typedef struct pthread_cond_t_ *pthread_cond_t; typedef struct pthread_condattr_t_ *pthread_condattr_t; +typedef struct pthread_rwlock_t_ *pthread_rwlock_t; +typedef struct pthread_rwlockattr_t_ *pthread_rwlockattr_t; /* @@ -496,6 +509,8 @@ struct pthread_once_t_ #define PTHREAD_COND_INITIALIZER ((pthread_cond_t) -1) +#define PTHREAD_RWLOCK_INITIALIZER ((pthread_rwlock_t) -1) + /* * ==================== @@ -845,6 +860,25 @@ int pthread_attr_getschedparam (const pthread_attr_t *attr, int pthread_attr_setschedparam (pthread_attr_t *attr, const struct sched_param *param); +/* + * Read-Write Lock Functions + */ + +int pthread_rwlock_init(pthread_rwlock_t *lock, + const pthread_rwlockattr_t *attr); + +int pthread_rwlock_destroy(pthread_rwlock_t *lock); + +int pthread_rwlock_tryrdlock(pthread_rwlock_t *); + +int pthread_rwlock_trywrlock(pthread_rwlock_t *); + +int pthread_rwlock_rdlock(pthread_rwlock_t *lock); + +int pthread_rwlock_wrlock(pthread_rwlock_t *lock); + +int pthread_rwlock_unlock(pthread_rwlock_t *lock); + /* * Protected Methods * -- cgit v1.2.3