zoukankan      html  css  js  c++  java
  • 读写锁(pthread)

    读写锁:

    用于对于某个给定资源的共享访问,而不是像互斥锁那样,将所有试图进入临界区的线程都阻塞住

    相关内容:

    线程
    互斥锁

    分配规则:(写独占,读共享)

    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 )设置属性值
  • 相关阅读:
    改Android手机定位位置
    设计模式-行为型模式
    设计模式-结构型模式
    设计模式-创建型模式
    LoadRunner改脚本
    交互设计流程
    java正则过滤特殊字符
    js正则表达式判断非法字符 .(转)
    <BEA-141281> <unable to get file lock, will retry ...> (转)
    JAVA调用打印机打印指定文件
  • 原文地址:https://www.cnblogs.com/lnlin/p/9698011.html
Copyright © 2011-2022 走看看