1、概述
读写锁(read-write lock),也称为共享独占锁(shared-exclusive 锁),写是独占,读是共享。
需要考虑的同步问题:可以同时读,不可以同时写,读写是互斥的。
2、读写锁的数据类型是:pthread_rwlock_t。函数如下:
int pthread_wrlock(pthread_rwlock_t *rwptr); 夺取写入锁:如果该锁已由另一个写入者持有,或者一个或多个读出者持有,则阻塞
int pthread_rdlock(pthread_rwlock_t *rwptr); 夺取读出锁:如果该锁由某个写入者持有,则阻塞
int pthread_unlock(pthread_rwlock_t *rwptr); 释放一个读入锁或者写出锁(这里是写者优先的原则)
int pthread_tryrdlock(pthread_rwlock_t *rwptr); :如果不满足条件,返回EBUSY
int pthread_trywrlock(pthread_rwlock_t *rwptr); :如果不满足条件,返回EBUSY
3、实现:用两个条件变量和一个互斥锁可以实现读写锁,具体实现见《UNP卷二》的相关章节。
4、读写锁属性:类似于互斥锁和条件变量。(略)
读写锁(read-write lock),也称为共享独占锁(shared-exclusive 锁),写是独占,读是共享。
需要考虑的同步问题:可以同时读,不可以同时写,读写是互斥的。
2、读写锁的数据类型是:pthread_rwlock_t。函数如下:
int pthread_wrlock(pthread_rwlock_t *rwptr); 夺取写入锁:如果该锁已由另一个写入者持有,或者一个或多个读出者持有,则阻塞
int pthread_rdlock(pthread_rwlock_t *rwptr); 夺取读出锁:如果该锁由某个写入者持有,则阻塞
int pthread_unlock(pthread_rwlock_t *rwptr); 释放一个读入锁或者写出锁(这里是写者优先的原则)
int pthread_tryrdlock(pthread_rwlock_t *rwptr); :如果不满足条件,返回EBUSY
int pthread_trywrlock(pthread_rwlock_t *rwptr); :如果不满足条件,返回EBUSY
3、实现:用两个条件变量和一个互斥锁可以实现读写锁,具体实现见《UNP卷二》的相关章节。
4、读写锁属性:类似于互斥锁和条件变量。(略)