pthread_rwlock_init 或 pthread_rwlock_destroy 子例程

用途

初始化或破坏读写锁对象。

线程库 (libthreads.a)

语法

#include <pthread.h>

int pthread_rwlock_init (rwlock, attr)
pthread_rwlock_t *rwlock;
const pthread_rwlockattr_t *attr;

int pthread_rwlock_destroy (rwlock)
pthread_rwlock_t *rwlock;
pthread_rwlock_t rwlock=PTHREAD_RWLOCK_INITIALIZER;

描述

pthread_rwlock_init 子例程使用 attr引用的属性初始化 rwlock 引用的读写锁。 如果 attr 为 NULL ,那么将使用缺省读写锁属性; 其效果与传递缺省读写锁属性对象的地址相同。 初始化后,可以使用任何次数的锁定,而无需重新初始化。 初始化成功后,读写锁的状态变为已初始化和已解锁。 如果调用 pthread_rwlock_init 来指定已初始化的读写锁,那么未定义结果。 如果在未首先初始化的情况下使用读写锁,那么未定义结果。

如果 pthread_rwlock_init 函数失败,那么未初始化 rwlock ,并且未定义 rwlock 的内容。

pthread_rwlock_destroy 函数破坏 rwlock 引用的读写锁对象,并释放该锁使用的任何资源。 在通过对 pthread_rwlock_init的另一个调用重新初始化锁定之前,未定义该锁定的后续使用效果。 实现可能会导致 pthread_rwlock_destroyrwlock 引用的对象设置为无效值。 如果在任何线程挂起 rwlock时调用 pthread_rwlock_destroy ,那么未定义结果。 尝试破坏未初始化的读写锁会导致未定义的行为。 可以使用 pthread_rwlock_init重新初始化被破坏的读写锁对象; 未定义在被破坏后引用读写锁对象的结果。

在缺省读写锁属性适当的情况下,可以使用宏 PTHREAD_RWLOCK_INITIALIZER 来初始化静态分配的读写锁。 效果相当于通过调用 pthread_rwlock_init 并将参数 attr 指定为 NULL 来进行动态初始化,只不过没有执行错误检查。

参数

描述
rwlock 指定要初始化或销毁的读写锁。
attr 指定要初始化的读写锁的属性。

返回值

如果成功, pthread_rwlock_initpthread_rwlock_destroy 函数将返回零。 否则,将返回错误号以指示错误。 EBUSY 和 EINVAL 错误检查 (如果已实现) 将如同它们是在函数处理开始时立即执行的一样,并在修改由 rwlock指定的读写锁的状态之前导致错误返回。

错误代码

在下列情况下, pthread_rwlock_init 子例程将失败:

描述
ENOMEM 内存不足,无法初始化读写锁。
EINVAL attr 指定的值无效。

在下列情况下, pthread_rwlock_destroy 子例程将失败:

描述
EBUSY 实现在锁定时检测到尝试破坏 rwlock 所引用的对象。
EINVAL attr 指定的值无效。