pthread_rwlock_timedrdlock 子例程

用途

锁定读写锁以进行读取。

语法

#include <pthread.h>
#include <time.h>

int pthread_rwlock_timedrdlock(pthread_rwlock_t *restrict rwlock,
       const struct timespec *restrict abs_timeout);

描述

pthread_rwlock_timedrdlock () 函数将读锁定应用于 rwlock 引用的读写锁定,如 pthread_rwlock_rdlock () 函数中一样。 但是,如果在不等待其他线程解锁锁定的情况下无法获取锁定,那么此等待将在指定超时到期时终止。 当 abs_timeout 指定的绝对时间经过时 (以超时所基于的时钟 (即,当该时钟的值等于或超过 abs_timeout时)) ,或者在调用时已经过 abs_timeout 指定的绝对时间时,超时将到期。

如果支持 Timers 选项,那么超时基于 CLOCK_REALTIME 时钟; 如果不支持 Timers 选项,那么超时基于 time () 函数返回的系统时钟。

超时的分辨率与它所基于的时钟的分辨率相匹配。 蒂梅斯佩克 数据类型在 <time.h> 头中定义。

如果可以立即获取锁定,那么该函数从不因超时而失败。 如果可以立即获取锁定,那么不需要检查 abs_timeout 参数的有效性。

如果通过对 pthread_rwlock_timedrdlock ()的调用将导致执行信号处理程序的信号传递到读写锁上阻塞的线程,那么在信号处理程序返回后,该线程将继续等待锁定 (好像未中断一样)。

如果调用线程在进行调用时持有对 rwlock 的写锁定,那么该调用线程可能会死锁。 如果使用未初始化的读写锁调用此函数,那么结果将未定义。

应用程序使用情况

pthread_rwlock_timedrdlock () 函数是 线程超时 选项的一部分,不需要在所有实现上提供。

返回值

如果获取了 rwlock 引用的读写锁对象的读取锁定,那么 pthread_rwlock_timedrdlock () 函数将返回 0。 否则,将返回错误号以指示错误。

错误代码

pthread_rwlock_timedrdlock () 函数在下列情况下失败:

描述
[ETIMEDOUT] 在指定的超时到期之前,无法获取锁定。

在下列情况下, pthread_rwlock_timedrdlock () 函数可能会失败:

描述
[再次] 无法获取读锁定,因为将超过锁定的最大读锁定数。
[EDEADLK] 调用线程已持有对 rwlock的写锁定。
[缺省值] rwlock 指定的值未引用已初始化的读写锁对象,或者 abs_timeout 纳秒值小于 0 或大于或等于 1000 万。

此函数不会返回错误代码 [EINTR]。