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

posted on 2021-09-14 22:41  开心种树  阅读(63)  评论(0编辑  收藏  举报