• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

CLRviaC#读书笔记4-1线程同步-常见的锁,原生用户模式和核心模式(上) ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

以锁为例:

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)

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap