我对 pthread 函数pthread_rwlock_wrlock的行为有疑问。上面链接的规范指出,当一个线程锁定写锁并且同一个线程再次锁定它时,它会导致未定义的行为(我实际上可以观察到这一点,在 x86 Linux 上调用此函数是一个 noop 而在 PowerPC Linux 上它停止线程)。
我需要的行为是具有以下特征的读写锁:
- 在以下情况下,线程的读锁定成功:
- 锁没有被任何线程持有
- 该锁仅被零个或多个线程(包括调用线程)读锁定,并且可能被调用线程读或写锁定
- 写锁定在以下情况下成功:
- 锁不被任何其他线程持有
- 只有当前线程持有锁(用于读取或写入)
使用 a pthread_mutex_t
,可以通过初始化标志来控制锁的递归性,但这对于 是不可能的pthread_rwlock_t
。
我有哪些选择?我实际上从来没有在 C 中实现这种并发原语,我认为我在这里缺少一些明显的解决方案。