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

    读写自旋锁

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


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


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

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


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

  • 相关阅读:
    如何编写属于自己的事件集合
    Android文件操作(可应用于JAVA)
    Share Point 2007 copy webservices overwrite exist file
    cnBlog的windows live writer 客户端配置
    VS 2012 找回消失的“创建单元测试”
    Oracle函数参考
    哲理小故事(一)
    输入框信息提示
    实现记住用户登陆名
    常用正则表达式
  • 原文地址:https://www.cnblogs.com/xinxinwang/p/4800078.html
Copyright © 2011-2022 走看看