多线程编程之读写锁


     Pthread是 POSIX threads 的简称,是POSIX的线程标准
        pthread读写锁把对共享资源的訪问者分为读者和写者,读者仅仅对共享资源进行读訪问,写者仅仅对共享资源进行写操作。在相互排斥机制,读者和写者都须要独立独占相互排斥量以独占共享资源,在读写锁机制下,同意同一时候有多个读者读訪问共享资源,仅仅有写者才须要独占资源。相比相互排斥机制,读写机制因为同意多个读者同一时候读訪问共享资源,进一步提高了多线程的并发度。
         
       1.读写锁机制:


       写者:写者使用写锁,假设当前没有读者,也没有其它写者,写者马上获得写锁;否则写者将等待,直到没有读者和写者。
       读者:读者使用读锁,假设当前没有写者,读者马上获得读锁;否则读者等待,直到没有写者。
           
          2.读写锁特性:


        同一时刻仅仅有一个线程能够获得写锁,同一时刻能够有多个线程获得读锁。
        读写锁出于写锁状态时,全部试图对读写锁加锁的线程,无论是读者试图加读锁,还是写者试图加写锁,都会被堵塞。
       读写锁处于读锁状态时,有写者试图加写锁时,之后的其它线程的读锁请求会被堵塞,以避免写者长时间的不写锁。
        
        3.读写锁基本函数:
 
       # include<pthread.h>
读写锁初始化:
        int
pthread_rwlock_init(pthread_rwlock_t * rwlock, 
                                                 const pthread_rwlockattr_t *  attr);
        该函数第一个參数为读写锁指针,第二个參数为读写锁属性指针。函数按读写锁属性对读写锁进行初始化。
加读锁:
        int
pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
        该函数參数为读写锁指针。函数用于对读写锁加读锁。
加写锁:
        int
pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);
        该函数參数为读写锁指针。函数用于对读写锁加写锁。
释放读写锁:
        int
pthread_rwlock_unlock(pthread_rwlock_t *rwlock);
        该函数參数为读写锁指针。函数用于释放读写锁,包含读锁与写锁。
销毁读写锁:
        int
pthread_rwlock_destroy(pthread_rwlock_t *rwlock);
        该函数參数为读写锁指针。函数用于销毁读写锁。


        4.牛刀小试:
        演示样例使用读写锁,对共享资源data进行读写同步,线程readerM,readerN为读者线程,线程writerA,writerB为写者线程。
      

【C/C++多线程编程之九】pthread读写锁的更多相关文章

  1. 【C/C++多线程编程之六】pthread相互排斥量

    多线程编程之线程同步相互排斥量       Pthread是 POSIX threads 的简称,是POSIX的线程标准.          Pthread线程同步指多个线程协调地,有序地同步使用共享 ...

  2. 【C/C++多线程编程之七】pthread信号量

    多线程编程之信号量      Pthread是 POSIX threads 的简称.是POSIX的线程标准.          相互排斥量用来处理一个共享资源的同步訪问问题,当有多个共享资源时,就须要 ...

  3. pthread 读写锁

    pthread 读写锁 (Read Write Lock, rwlock) 把对共享资源的访问者分为读者和写者,读者仅仅对共享资源进行读访问,写者仅仅对共享资源进行写操作. 如果使用互斥量 mutex ...

  4. 【C/C++多线程编程之五】pthread线程深入理解

    多线程编程之pthread线程深入理解       Pthread是 POSIX threads 的简称,是POSIX的线程标准.           前几篇博客已经能给你初步的多线程概念.在进一步学 ...

  5. UNIX环境高级编程——线程同步之读写锁以及属性

    读写锁和互斥量(互斥锁)很类似,是另一种线程同步机制,但不属于POSIX标准,可以用来同步同一进程中的各个线程.当然如果一个读写锁存放在多个进程共享的某个内存区中,那么还可以用来进行进程间的同步, 互 ...

  6. 【转】java并发编程系列之ReadWriteLock读写锁的使用

    前面我们讲解了Lock的使用,下面我们来讲解一下ReadWriteLock锁的使用,顾明思义,读写锁在读的时候,上读锁,在写的时候,上写锁,这样就很巧妙的解决synchronized的一个性能问题:读 ...

  7. pthread_rwlock pthread读写锁

    原文: http://www.cnblogs.com/diegodu/p/3890450.html 使用读写锁 配置读写锁的属性之后,即可初始化读写锁.以下函数用于初始化或销毁读写锁.锁定或解除锁定读 ...

  8. Android多线程研究(9)——读写锁

    一.什么是锁 在Java的util.concurrent.locks包下有关于锁的接口和类如下: 先看一段代码: package com.codeing.snail.test; public clas ...

  9. 【C/C++多线程编程之十】pthread线程私有数据

    多线程编程之线程私有数据      Pthread是 POSIX threads 的简称.是POSIX的线程标准.         线程同步从相互排斥量[C/C++多线程编程之六]pthread相互排 ...

随机推荐

  1. Oracle查看和修改连接数(进程/会话/并发等等)

    查询数据库当前进程的连接数及会话的连接数.并发连接数以及会话情况等等,感兴趣的你可以参考下哈,希望可以帮助到你   1.查询数据库当前进程的连接数: 复制代码 代码如下: select count(* ...

  2. C++ 下 typeof 的实现

    现在我们有这样一坨代码: std::vector<int> arr; // ... for(std::vector<int>::iterator iter = arr.begi ...

  3. Java 覆盖测试工具 :EclEmma

    http://www.eclemma.org/installation.html#manual EclEmma 2.2.1 Java Code Coverage for Eclipse Overvie ...

  4. 面向对象程序设计-C++_课时12访问限制

    private: 只有这个类(相同的类,不同的对象也可以)的成员函数可以访问这些成员变量或函数 public: 任何人都可以访问 protected: 只有这个类以及它的子子孙孙可以访问

  5. python 【第四篇】:面向对象(一)

    1.前言 提笔忘字,感慨良多!python自习前前后后有一年多了吧,貌似花了不少时间,其实没学到啥东西,都是在面向对象编程之前基础知识这块一直打转转,每次到了面向对象这块就感觉很蒙,看两天直接放弃,从 ...

  6. 剑指offer 替换字符串中的空格

    void replaceSpace(char *str,int length) { ) return; ; ; ; while(str[originlen]!='\0') { if(str[origi ...

  7. Seinfeld(栈模拟)

    Seinfeld Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  8. Android TextView drawableLeft 在代码中实现

    方法1 Drawable drawable= getResources().getDrawable(R.drawable.drawable); /// 这一步必须要做,否则不会显示. drawable ...

  9. bit-map牛刀小试:数组test[X]的值所有在区间[1, 8000]中, 现要输出test中反复的数。要求:1. 不能改变原数组; 2.时间复杂度为O(X);3.除test外空间不超过1KB

    先来看看这个题目:数组test[X]的值所有在区间[1, 8000]中. 现要输出test中反复的数.要求:1. 不能改变原数组; 2.时间复杂度为O(X);3.除test外空间不超过1KB. 好, ...

  10. 2.Visual Studio 2013中的默认快捷键

    这篇大致是IDE的使用技巧,常用的也就那么几个. 我自己用的最多的是注释.取消注释.格式调整.运行测试.开始调试.断开调试.重新开始调试.删除行ctrl+L.保存.全部保存.打开资源管理器.搜索等几个 ...