Linux系统编程——同步——读写锁
1. 读写锁的定义
write 和 readers:
- 当一个进程获得读锁时,其他进程可以获得读锁,而不能获得写锁
- 当一个进程获得写锁时,其他进程不能获得任何锁
因为当数据正在被写时,数据是脏的,所以读共享,写独占
2. api
2.1 静态初始化
读写锁类型是 pthread_rwlock_t,使用 常量 PTHREAD_RWLOCK_INITIALIZER 来初始化
2.2 动态初始化
int pthread_rwlock_init(pthread_rwlock_t *rwptr, const pthread_rwlockattr_t *attr);
int pthread_rwlock_destroy(pthread_rwlock_t *rwptr);
2.3 获得/释放锁
以下api用于 读/写 方式获得锁,和释放锁
int pthread_rwlock_rdlock(pthread_rwlock_t *rwptr);
int pthread_rwlock_wrlock(pthread_rwlock_t *rwptr);
int pthread_rwlock_unlock(pthread_rwlock_t *rwptr);
以下api以非阻塞方式获得锁,若失败返回 EBUSY
int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwptr);
int pthread_rwlock_trywrlock(pthread_rwlock_t *rwptr);
2.4 设置属性
int pthread_rwlockattr_init(pthread_rwlockattr_t *attr);
int pthread_rwlockattr_destroy(pthread_rwlockattr_t *attr);
int pthread_rwlockattr_getpshared(const pthread_rwlockattr *attr, int valptr);
int pthread_rwlockattr_setpshared(pthread_rwlockattr_t *attr, int value);
value为 PTHREAD_PROCESS_PRIVATE 或 PTHREAD_PROCESS_SHARED