zoukankan      html  css  js  c++  java
  • 《多处理器编程的艺术》读书笔记(5) 自旋锁(2)

          争用指多个线程试图同时获取一个锁;高争用意味着存在大量正在争用的线程;低争用的意思与高争用相反。在TTASLock类中,setlock()方法使用了两个步骤:它不断地读锁,当锁看似空闲时,则尝试获得锁。如果其他的某个线程在第一步和第二步之间获得了锁,那么该锁极有可能存在高争用。显然,试图获得一个存在高争用的锁是一种应该回避的情形。此时线程获得锁的机会非常小,因为这种尝试将会导致总线流量的增加(导致流量拥塞)。相反,若让线程后退一段时间,给正在竞争的线程以结束的机会,将会更加有效。

          线程在重试之前应该后退多久呢?一种好的准则就是不成功尝试的次数越多,发生争用的可能性就越高,线程需要后退的时间就应越长。下面是一种简单的方法,每当线程发现锁变为空闲但却无法获得它时,就在重试之前后退。为了确保发生冲突的并发线程不进入获取锁的步骤,即在同一时刻所有线程都试图获得锁,该线程应随机地后退一段时间。每当线程试图获得一个锁但又失败以后,则将后退时间加倍,直到一个固定的最大值maxDelay为止。

    Code
  • 相关阅读:
    生物学上描述DNA/RNA的长度常用的kb、nt、bp是指什么
    置换检验代码, matlab codes for permutation tests
    MATLAB命令大全——以字母顺序进行分类
    2011年春季C语言课程设计指导书
    C/C++语言课程设计任务书
    hibernate 自动生成数据库表
    利用Tomcat的用户名和密码构建“永久”后门
    flex成品作不知道有哪位大神能看懂是干嘛的
    wikioi1014 装箱问题
    怎样把USB键盘接到Android手机上
  • 原文地址:https://www.cnblogs.com/pennant/p/1587093.html
Copyright © 2011-2022 走看看