zoukankan      html  css  js  c++  java
  • CLR via C# 读书笔记 41 线程同步常见的锁,原生用户模式和核心模式 (上)

    本文主要描述为了保证线程同步和数据安全采用的若干种不同方案

    以锁为例:

    1.用户模式(User-Mode)比核心模式(Kernel-Mode)快很多

    2.windows操作系统无法发现用户模式的锁 (即使已经被Blocked了) ,所以线程池也不会为此新建一个线程处理新的请求

    3.核心模式的锁可以使得线程停止运行, 这样就不会浪费CPU,只是浪费内存(条件满足的时候,windows会唤醒之前休眠的线程继续执行)

    4.用户模式的锁定,其实线程还在运行,浪费CPU和内存

    5.核心模式的锁会极大的损害性能

    PS:用户模式的永久锁定称为livelock ,核心模式的永久锁定称为 deadlock

    综合考虑到以上的情况

    那么在锁定时间很短的情况下 应该优先考虑用户模式

    在锁定时间比较长的时候,应该优先考虑核心模式,因为他在等待的时候不会浪费CPU (个人觉得所有等待超过1ms的都应该用核心模式)

    FCL原生的用户模式锁有两种:(强烈推荐在多线程程序中应用InterLocked)

    1.Volatile , 将一个简单数据类型标记为volatile将使得这个变量的读写操作变为原子的 (不要为了方便吧所有的变量标记为volatile)

    2.InterLocked ,这个类封装了一些对于简单数据类型的操作,例如Exchange,CompareExchange,Add   (这个类是非常有用的)

      PS:我不明白为什么InterLocked不支持Boolean这种简单数据类型......

    名词翻译:

    用户模式(User-Mode)

    核心模式(Kernel-Mode)

  • 相关阅读:
    android 摇一摇功能的实现
    几种排序算法
    程序员面试宝典笔记一二
    在命令行运行java代码
    【小记整理】mybatis配置多个扫描路径写法
    idea+mvc项目转换小记
    SpringCloud学习笔记
    Shell学习笔记2》转载自runnoob
    idea初见问题整理_错误: -source 1.5 中不支持 diamond 运算符
    汇编入门四-寄存器
  • 原文地址:https://www.cnblogs.com/PurpleTide/p/1893198.html
Copyright © 2011-2022 走看看