zoukankan      html  css  js  c++  java
  • linux并发控制之读写自旋锁

    读写自旋锁(rwlock)是一种比自旋锁粒度更小的自旋锁机制,它保留了“自旋”的概念。
    但是在写操作方面,只能最多有一个写进程,在读方面,同时可拥有多个执行单元,当然读和写也不能同时进行。
    一句话:防写不防读
     
    操作:
    定义于#include<linux/rwlock.h>
    或#include<linux/spinlock.h>

    rwlock_t x;               
    rwlock_init(&x);    //动态初始化
    rwlock_t x=RW_LOCK_UNLOCKED;    //静态初始化 

    void read_lock(rwlock_t *lock);    //如果不能获得,它将自旋,直到获得该读写锁
    void read_unlock(rwlock_t *lock);
    在对共享资源进行读取之前,应该先调用读锁定函数锁定共享资源,完成之后再调用读解锁函数释放共享资源

    void write_lock(rwlock_t *lock);    //如果不能获得,它将自旋,直到获得该读写锁
    void write_unlock(rwlock_t *lock);
    在对共享资源进行写操作之前,应该先调用写锁定函数锁定共享资源,完成之后再调用写解锁函数释放共享资源

    read_trylock(lock);
    write_trylock(lock);

    read_lock_irq(lock);    //读者获取读写锁,并禁止本地中断
    read_unlock_irq(lock);    //读者释放读写锁,并使能本地中断

    write_lock_irq(lock);//写者获取读写锁,并禁止本地中断
    write_unlock_irq(lock);

    read_lock_irqsave(lock, flags);//读者获取读写锁,同时保存中断标志,并禁止本地中断
    read_unlock_irqrestores(lock,flags);//读者释放读写锁,同时恢复中断标志,并使能本地中断

    write_lock_irqsave(lock,flags);//写者获取读写锁,同时保存中断标志,并禁止本地中断
    write_unlock_irqstore(lock,flags);

    read_lock_bh(lock);//读者获取读写锁,并禁止本地软中断
    read_unlock_bh(lock);

    write_lock_bh(lock);//写者获取读写锁,并禁止本地软中断
    write_unlock_bh(lock);

    用例:
    rwlock_t lock;     //定义rwlock
    rwlock_init(&lock);    //初始化rwlock

    //读时获取锁
    read_lock(&lock);
    ...临界区...
    read_unlock(&lock);

     //写时获取锁
    write_lock_irqsave(&lock, flags);
    …临界区...
    write_unlock_irqrestore(&lock, flags);
  • 相关阅读:
    TF-IDF
    线性回归梳理
    snappy 在linux安装及使用
    Hbase 写入机制详解与MVCC机制
    phoenix二级索引源码阅读
    利用SET工具制造钓鱼网站
    jQuery框架漏洞全总结及开发建议
    DDE注入(CSV)漏洞原理及实战案例全汇总
    burp插件大全 漏洞扫描 waf绕过 sql XSS 命令注入 fuzzer
    点击劫持(ClickJacking)漏洞挖掘及实战案例全汇总
  • 原文地址:https://www.cnblogs.com/hehehaha/p/6332968.html
Copyright © 2011-2022 走看看