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 )设置属性值
  • 相关阅读:
    【火炉炼AI】机器学习003-简单线性回归器的创建,测试,模型保存和加载
    【火炉炼AI】机器学习002-标记编码方法
    【火炉炼AI】机器学习001-数据预处理技术(均值移除,范围缩放,归一化,二值化,独热编码)
    HOJ 13830 DNA Sequencing
    HDU 6078 Wavel Sequence
    hoj 13814 Cake cut
    HDU6071 Lazy Running
    HDU 6070 Dirt Ratio
    HDU 6070 Dirt Ratio
    HDU 6059 Kanade's trio
  • 原文地址:https://www.cnblogs.com/lnlin/p/9698011.html
Copyright © 2011-2022 走看看