• Linux读写锁的使用


    读写锁是用来解决读者写者问题的,读操作可以共享,写操作是排它的,读可以有多个在读,写只有唯一个在写,写的时候不允许读。

    具有强读者同步和强写者同步两种形式:

    强读者同步:当写者没有进行写操作时,读者就可以访问;

    强写者同步: 当所有写者都写完之后,才能进行读操作,读者需要最新的信息,一些实时性较高的系统会用到这种锁。

    读写锁的初始化:

    pthread_rwlock_t m_rw_lock;

    pthread_rwlock_init(pthread_rwlock_t*, pthread_rwattr_t*);

    获取读写锁的读锁操作:分为阻塞式获取和非阻塞式获取,如果读写锁由一个写者持有,则读线程会阻塞直到写入者释放读写锁。

    阻塞式:pthread_rwlock_rdlock(pthread_rwlock_t);

    非阻塞式:pthread_rwlock_tryrdlock(pthread_rwlock_t);

    返回值:0,表示成功; 非0表示错误码;非阻塞会返回ebusy而不会让线程等待。

    获取读写锁的写锁操作:分为阻塞和非阻塞,如果对应的读写锁被其它写者持有,或者读写锁被读者持有,该线程都会阻塞等待。

    阻塞式:pthread_rwlock_wrlock(pthread_rwlock_t*);

    非阻塞式:pthread_rwlock_trywrlock(pthread_rwlock_t*);

    释放读写锁:

      pthread_rwlock_unlock(pthread_rwlock_t*);

    互斥锁与读写锁的区别:

    1、当访问临界区的资源时(访问的含义包括所有的操作),需要上互斥锁;

    2、当对数据(互斥锁中的临界区资源)进行读取时,需要上读取锁,当对数据进行写入时,需要上写入锁。

    读写锁的优点:

    对于读数据较修改数据频繁的应用,用读写锁代替互斥锁可以提高效率。因为使用互斥锁时,即使是读出数据(相当于操作临界区资源)都需要上互斥锁;而采用读写锁则允许在任一时刻多个读出

    者存在,提高了并发性。

  • 相关阅读:
    【python3之文件操作】
    【Python3之字符编码】
    【python3之变量,输入输出,判断,循环】
    【Python3之正则re】
    【Python3的命名空间与作用域,闭包函数,装饰器】
    【Python3的函数初识】
    【Python3的进制扫盲】
    JS实现数组去重方法总结(六种方法)
    localstorage sessionstorage和cookie的区别,以及他们各自的用法总结
    es6 javascript对象方法Object.assign()
  • 原文地址:https://www.cnblogs.com/guagua2016/p/5993396.html
Copyright © 2020-2023  润新知