情况:
- 程序正在使用
pthread_rwlock_t,比如说foolock - 一个线程,比如 T1,
pthread_rwlock_wrlock()在foolock - T1 尝试获取读锁 (
pthread_rwlock_rdlock()) onfoolock - 没有其他线程拥有读锁或写锁
foolock - 有匹配的解锁。
预计会发生什么?
程序(特别是 T1)收到一个错误:
pthread_rwlock_rdlock() returns EDEADLK ("Resource deadlock avoided").
选择这种行为的动机是什么?如果授予读锁会出现什么问题?
什么可能是解决这种情况的好方法?或许,T1 需要维护一些它已经持有写锁的状态foolock。还有什么建议吗?
我的测试平台是Linux 2.6.32-431.11.2.el6.x86_64,NPTL 2.12
编辑1:很少澄清:
- 我不是想将读锁升级为写锁
- 我不是想将写锁降级为读锁
- 我正在探索在已经获得写锁时是否可以授予读锁请求。
简化上下文:
- 我正在尝试提供两个公共 API:(1)
find()和 (2)update() find()采用读锁update()使用写锁update()实现要调用 find() <<--问题
我目前的做法是:
- 让每个公共API都有对应的无锁私有版本
公共 API 执行 3 个步骤:
- (a) 获得适当的锁,
- (b) 调用私人版本,
- (c) 释放锁