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_destroy 将 rwlock 引用的对象设置为无效值。 如果在任何线程挂起 rwlock时调用 pthread_rwlock_destroy ,那么未定义结果。 尝试破坏未初始化的读写锁会导致未定义的行为。 可以使用 pthread_rwlock_init重新初始化被破坏的读写锁对象; 未定义在被破坏后引用读写锁对象的结果。
在缺省读写锁属性适当的情况下,可以使用宏 PTHREAD_RWLOCK_INITIALIZER 来初始化静态分配的读写锁。 效果相当于通过调用 pthread_rwlock_init 并将参数 attr 指定为 NULL 来进行动态初始化,只不过没有执行错误检查。
参数
| 项 | 描述 |
|---|---|
| rwlock | 指定要初始化或销毁的读写锁。 |
| attr | 指定要初始化的读写锁的属性。 |
返回值
如果成功, pthread_rwlock_init 和 pthread_rwlock_destroy 函数将返回零。 否则,将返回错误号以指示错误。 EBUSY 和 EINVAL 错误检查 (如果已实现) 将如同它们是在函数处理开始时立即执行的一样,并在修改由 rwlock指定的读写锁的状态之前导致错误返回。
错误代码
在下列情况下, pthread_rwlock_init 子例程将失败:
| 项 | 描述 |
|---|---|
| ENOMEM | 内存不足,无法初始化读写锁。 |
| EINVAL | attr 指定的值无效。 |
在下列情况下, pthread_rwlock_destroy 子例程将失败:
| 项 | 描述 |
|---|---|
| EBUSY | 实现在锁定时检测到尝试破坏 rwlock 所引用的对象。 |
| EINVAL | attr 指定的值无效。 |