我对这些功能的行为规范一无所知。
想象一下这种情况:
T1,T2和T3是线程的名称。
连续执行操作。
T1 calls pthread_rwlock_rdlock().
T2 calls pthread_rwlock_wrlock() and wait because
rwlock is hold by T1.
T3 calls pthread_rwlock_rdlock().
T1 calls pthread_rwlock_unlock().
接下来是什么?
规范说:
“如果写入者未持有该写入者并且该写入者没有被阻塞,则调用线程将获得读取锁定”。
我无法理解T3是否会在T2之前抢占先机。
我希望是的。
你能解决我的问题吗?
答案 0 :(得分:4)
如果支持线程执行调度,则应该能够选择它的工作方式。在pthread_rwlock_rdlock
的手册页中:
如果支持“线程执行调度”选项,并且锁中涉及的线程正在按调度执行 策略SCHED_FIFO或SCHED_RR,则调用线程不得获取 作家持有的锁 锁,或者优先级较高或相等的写程序被阻止;否则,调用线程将获得该锁。
如果支持“线程执行调度”选项,并且锁中涉及的线程正在使用SCHED_SPORADIC执行 调度策略,如果发生以下情况,调用线程将不获取锁 作家握着锁 或具有更高或同等优先级的作者被锁定在锁上;否则,调用线程将获得该锁。
否则,它是实现定义的:
如果不支持“线程执行计划”选项,则由实现定义是否调用线程 当作家不持有锁并且有 作家封锁了锁。如果 编写者持有该锁,调用线程不得获取读取锁。如果未获得读锁,则调用线程应 阻止,直到它可以获取锁为止。调用线程可能会死锁 如果当时 进行调用,使其拥有写锁。