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 )设置属性值
  • 相关阅读:
    微软WP7本机数据库解决方案之Sqlite
    NSIS nsDialogs Plugin
    NSIS 的 Modern UI 教程
    C# Sqlite For WP7
    铁血规则:事件预订与取消预订[转]
    .NET FRAMEWORK2.0中的农历类
    DefWndProc/WndProc/IMessageFilter的区别
    经典正则表达式分析与收藏
    博客园怎么了?
    .net项目开发工具(最近更新V2.1.0.5)
  • 原文地址:https://www.cnblogs.com/lnlin/p/9698011.html
Copyright © 2011-2022 走看看