读写锁:
用于对于某个给定资源的共享访问,而不是像互斥锁那样,将所有试图进入临界区的线程都阻塞住
相关内容:
分配规则:(写独占,读共享)
1.只要没有线程持有某个给定的读写锁用于写,那么任意数目的进程可以持有该读写锁用于读
2.仅当没有线程持有某个给定的读写锁用于写或读时,才能分配该读写锁用于写
获取与释放读写锁:
#include <pthread.h> // 若成功返回0,出错返回正的Exxx值 // 分配一个读出/写入锁 // 静态分配的读写锁用 PTHREAD_RWLOCK_INITIALIZER 初始化 int pthread_rwlock_rdlock(pthread_rwlock_t *rwptr); int pthread_rwlock_wrlock(pthread_rwlock_t *rwptr); // 下面这两个函数也是用于分配一个读出/写入锁,但不同于上面两个函数 // 若该锁不能立即获得,那么返回一个EBUSY错误,而非将调用线程投入睡眠 int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwptr); int pthread_rwlock_trywrlock(pthread_rwlock_t *rwptr); // 释放一个读写锁 int pthread_rwlock_unlock(pthread_rwlock_t *rwptr);
读写锁属性:
#include <pthread.h> // 若成功返回0,出错返回正的Exxx值 // 动态初始化一个读写锁,若 attr 为空指针时,使用默认属性 int pthread_rwlock_init(pthread_rwlock_t *rwptr, const pthread_rwlockattr_t *attr); // 摧毁一个动态初始化的读写锁 int pthread_rwlock_destory(pthread_rwlock_t *rwptr); // 初始化/摧毁一个读写锁属性 int pthread_rwlockattr_init(pthread_rwlockattr_t *attr); int pthread_rwlockattr_destory(pthread_rwlockattr_t *attr); // 获取/设置一个读写锁属性 int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *attr, int *valptr); int pthread_rwlockattr_setpshared(pthread_rwlockattr_t *attr, int value); // 通过valptr返回属性当前值,通过value(其值为 PTHREAD_PROCESS_PRIVATE或PTHREAD_PROCESS_SHARED )设置属性值