zoukankan      html  css  js  c++  java
  • 线程竞争

    今日阅读《现代操作系统》颇有感触,此书的翻译质量还可以,内容也绝非晦涩难懂,可以作为一本操作系统的扫盲书。

    处理线程竞争

    我们处理竞争问题必须要满足下面几个条件

    1)任何两个进程不能处于同一个临界区

    2)不应对CPU的速度和数量做假设

    3)临界区外的进程不得阻塞任何进程

    4)不能使进程无限期等待进入临界区

    几种 方式

    1.轮换,锁变量的一种方式

    这属于一种忙等待,一直while跑,浪费性能,也叫自旋锁。但是它违背了阻塞原则。

    2.屏蔽中断

    因为CPU只有发生时钟中断或其他中断时才能进行线程切换,所以可以在每个进程进入临界区就屏蔽中断。但是屏蔽只对执行屏蔽disabled的CPU有效,所以会导致多核CPU根本不能达到预期效果。

    3.Peterson解法,也是锁变量,一种互斥算法,很cool

    1.如果只有线程0进入,到了while会不满足interested[other] == true,执行完返回

    2.如果在0进入后1又想进入,此时线程1的interested[other] == true,所以会卡住,只有等线程0调用leave,才会让other = false,进而0的while循环才能通过。

    避免锁

    read-copy-update:将更新过程种的移除和再分配分离开来。

    添加一个节点:

    移除两个节点

    这两个过程都不涉及锁,只是把操作分离。

    可参考下面一个简单的示例介绍

    https://blog.usejournal.com/java-multithreading-part-1-ec0c42bbead6

    一个没有高级趣味的人。 email:hushui502@gmail.com
  • 相关阅读:
    Node.js Express框架
    Node.js Web模块
    Node.js 工具模块
    Node.js GET/POST请求
    Node.js 文件系统
    Node.js 常用工具
    【day03】Xhtml
    【day02】Xhtml
    【紫书】【重要】Not so Mobile UVA
    【紫书】Tree UVA
  • 原文地址:https://www.cnblogs.com/CherryTab/p/12070395.html
Copyright © 2011-2022 走看看