• 读写锁(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 )设置属性值
  • 相关阅读:
    iOS网络开发之AFNetworking
    TCP/IP、Http、Socket的区别
    iOS开发
    iOS 10相关技术
    HTTP协议详解
    HTTPS和HTTP的区别
    CocoaPods
    关于 iOS 10 中 ATS 的问题
    Run Loop详解
    iOS开发项目之MVC与MVVM
  • 原文地址:https://www.cnblogs.com/lnlin/p/9698011.html
Copyright © 2020-2023  润新知