zoukankan      html  css  js  c++  java
  • 读写自旋锁

    读写自旋锁

    1:什么是自旋锁?
    自旋锁就是互斥的同步原语,试图进入临界区的线程只用忙等的方式检测锁的状态。如果检测到锁未被持有,则进入临界区。因为采用忙等的方式,所以自旋锁必须是锁住很小的一块儿代码,并且很短的时间片。


    2:读写自旋锁?
    有些线程在临界区内只是简单的读取一些信息,不会涉及到信息的修改,允许读取信息的线程进入临界区不会有危险,同时还可以提高性能。所以将这些线程区分为读线程和写线程,从而就有了读写自旋锁。


    3:如何使用?
    临界区里面保护的共享资源有可能是一个单一变量,也可能是多个变量或者一个复杂结构的文件。所以每个共享的资源对应一把读写自旋锁。线程只允许采用如下方式来访问自旋锁。
    1> 申请锁
    2> 获得锁之后,读写共享资源
    3> 释放锁

    4:自旋锁满足四个属性
    1> 互斥:任何时刻读者写者不能同时进入临界区。任意时刻只能至多一个写者进入临界区
    2> 读者并发:满足互斥的前提下,多个读者可以同时进入临界区
    3> 无死锁
    4> 忙等:读写锁只用于很小的代码片段,线程等待期间不可以进入睡眠状态,因为睡眠/ 唤醒非常的耗时,大大延迟了获得锁的时间。


    5:读者与写着竞争获得锁的时候,有一定的偏好策略
    (1)读者优先:
    如果锁被读者拥有,则优先偏好读者进入临界区
    (2)写者优先:
    写者在后到的读者/写者之前抢到锁

  • 相关阅读:
    生产环境经常用到的命令
    JDK 安装部署
    oracle备份脚本
    HTTP与HTTPS的区别
    TCP和UDP的优缺点及区别
    Web服务器优化
    DDOS攻击的三种常见方式
    Xss Csrf DDOS sql注入及防范
    session共享
    Cookie防伪造防修改
  • 原文地址:https://www.cnblogs.com/xinxinwang/p/4800078.html
Copyright © 2011-2022 走看看