|HP-UX Reference > P
HP-UX 11i Version 3: February 2007
pthread_rwlock_init(), pthread_rwlock_destroy() — initialize or destroy a read-write lock
int pthread_rwlock_init( pthread_rwlock_t *__restrict rwlock, const pthread_rwlockattr_t *__restrict attr );
pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER;
int pthread_rwlock_destroy( pthread_rwlock_t *rwlock );
pthread_rwlock_init() initializes the read-write lock referenced by rwlock with the attributes attr. If attr is NULL, the default read-write lock attributes are used. Upon successful initialization, the state of the read-write lock becomes initialized and unlocked. Attempting to initialize an already initialized read-write lock object results in undefined behavior.
The macro PTHREAD_RWLOCK_INITIALIZER can be used to initialize read-write locks which are statically allocated. The effect is equivalent to dynamic initialization by a call to pthread_rwlock_init() with the attr parameter specified as NULL, except that no error checks are performed. The read-write lock will be initialized with default attributes.
If the process-shared attribute in the read-write lock attributes object referenced by attr is defined as PTHREAD_PROCESS_SHARED, the read-write lock must be allocated such that the processes sharing the read-write lock has access to it. This may be done through the memory-mapping functions (see mmap(2)) or shared memory functions (see shmget(2)).
pthread_rwlock_destroy() destroys the read-write referenced by rwlock. This function may set rwlock to an invalid value. The destroyed read-write lock can be reinitialized using the function pthread_rwlock_init(). If the read-write lock is referenced after destruction in any read-write lock call, the resulting behavior is undefined.
A read-write lock should be destroyed only when no threads are currently using it. Destroying a read-write lock which is currently in use results in undefined behavior.
Upon successful completion, pthread_rwlock_init() and pthread_rwlock_destroy() returns zero. Otherwise, an error number is returned to indicate the error (the errno variable is not set).
If any of the following occur, the pthread_rwlock_init() function returns the corresponding error number:
If any of the following occur, the pthread_rwlock_destroy() function returns the corresponding error number:
The space for the read-write lock must to be allocated before calling pthread_rwlock_init(). Undefined behavior may result if the process-shared attribute of attr is PTHREAD_PROCESS_SHARED and the space allocated for the read-write lock is not accessible to cooperating threads.
pthread_rwlock_rdlock(3T), pthread_rwlock_tryrdlock(3T), pthread_rwlock_trywrlock(3T), pthread_rwlock_unlock(3T), pthread_rwlock_wrlock(3T).