求interlockeddecrement攻略3-7图解

摘要: 本系列意在记录Windwos线程的相关知识点,包括线程基础、线程调度、线程同步、TLS、线程池等。
这篇来说说静态的Interlocked类和ReadWrite锁
.NET中的Interlocked
Interlocked的系列方法提供了对简单类型的原子操作(不会被打断的操作),因此这也是一种多线程共享变量,防止冲突争用的方法。
比如下面的方法作用是以原子的方式递增整数i:
int i = 0 ;
Interlocked.Increment( ref i);
除此之外还包括Add、Exchange、CompareExchange、Decrement、Read和其中的某些泛型版本。如果看官使用过windows API自带的Interlock系列函数,可能已经发现了:这里的Interlocked类应该只是封装了windows API的调用。在中详细阐述了Interlocked系列函数的存在意义和使用方法,作为对比下面列出.NET版本和windows API版本:
Interlocked.Add
InterlockedExchangeAdd
对某个变量做加法
Interlocked.Increment
InterLockedIncrement
Interlocked.Decrement
InterLockedDecrement
Interlocked.Exchange
InterlockedExchange
对变量赋值
Interlocked.CompareExchange
InterlockedCompareExchange
对变量比较后赋值(参数1与参数3比较,如果相同,把参数2赋值给参数1)
此外,Windows API还提供InitializeSListHead/InterlockedPushEntrySList/InterlockedPopEntrySList/InterlockedFlushSList/QueryDepthSList来构建单链表栈,参见:
对于Interlocked.CompareExchange,之前在园子里看到一篇关于单例的文章:。文章大意是由于对象在通过new关键字创建时,可能会先将引用赋值给目标变量,再调用构造器,因此,在单例模式中的&双检测技术&可能会有隐含的bug。最后作者提出替代方案使用了Interlocked.CompareExchange,这里照搬过来了:
internal sealed class MySingleton
private static MySingleton s_value =
public static MySingleton GetMySingleton()
if (s_value != null) return s_
MySingleton temp = new MySingleton();
Interlocked.CompareExchange(ref s_value, temp, null);
.NET中的ReaderWriterLock
有时对于共享资源应当区分读和写,因为读的时候往往是允许多线程同时读的,因为这不会造成混乱;而只有在需要写的时候才不允许其他线程读或者写。.NET的和为我们提供了区分读和写的锁。这种方式在有些情况下通常比Monitor更高效。在MSDN中推荐使用的是ReaderWriterLockSlim类,其解释是ReaderWriterLockSlim用一种简单的规则处理递归调用以及更好的支持锁升级机制,而且能更好的避免死锁的发生,最后它比ReaderWriterLock更高效。由于两者十分相似,所以这里就对ReaderWriterLockSlim作个简单的讨论。
首先,应当尽量避免在同一个线程中多次对请求一个锁,典型的情况就是递归的调用,因为这往往容易死锁。因此,ReaderWriterLockSlim的默认无参构造函数是不允许递归的,当然你也可以设置允许递归:
public ReaderWriterLockSlim(
LockRecursionPolicy recursionPolicy
对于ReaderWriterLockSlim锁,一个线程试图获取锁的时候分三种模式:
Read Mode:读模式,表示线程试图对共享资源进行读操作,而不会写。ReaderWriterLockSlim.EnterReadLock\ReaderWriterLockSlim.TryEnterReadLock
Write Mode:写模式,表示线程试图对共享资源进行写操作。ReaderWriterLockSlim.EnterWriteLock\ReaderWriterLockSlim.TryEnterWriteLock
Upgradeable Read Mode:读模式,但可能将来升级成写锁。ReaderWriterLockSlim.EnterUpgradeableReadLock\ReaderWriterLockSlim.TryEnterUpgradeableReadLock
在不考虑同一个线程递归请求锁的情况下:
同一时刻只能有一个线程获得写锁,在有线程获得写锁的时候,其他线程将无法获得任何类型的锁;
同一时刻只能有一个可升级的读锁,在有线程获得可升级读锁的时候,其他线程只能获得读锁;
同一时刻读锁可以被多个线程获得,除了上述两种情况;
同一时刻只能有一个线程获得可升级读锁,当获得可升级读锁的线程试图获得写锁的时候或可以调用EnterWriteLock,如果此时有线程没有释放写锁的话,EnterWriteLock会阻塞直到所有的读锁释放,同时试图获得读锁的线程也将阻塞(这里不用考虑写锁,因为既然可以获得可升级读锁,那么必然不存在写锁),这有点像&关门放狗&,关上门不让狗进来,而把已经在里面的狗放走。:)
请参考MSDN上的例子理解ReadWriterLockSlim:
ReaderWriterLockSlim和Slim读/写锁
在中介绍了Windows API提供的读写锁同步方式。下面的表格对两种API做了比较:
ReaderWriterLockSlim构造
InitializeSRWLock
ReaderWriterLockSlim.EnterWriteLock
AcquireSRWLOckExclusive
ReaderWriterLockSlim.TryEnterWriteLock
ReaderWriterLockSlim.ExitWriteLock
ReleaseSRWLockExclusive
ReaderWriterLockSlim.EnterReadLock
AcquireSRWLockShared
ReaderWriterLockSlim.TryEnterReadLock
ReaderWriterLockSlim.ExitReadLock
ReleaseSRWLockShared
ReaderWriterLockSlim.EnterUpgradeableReadLock
ReaderWriterLockSlim.TryEnterUpgradeableReadLock
ReaderWriterLockSlim.ExitUpgradeableReadLock
CONDITION_VARIABLE
API提供了条件变量的支持
可以递归特性
.NET提供了递归
从上表中可以看到,.NET的版本具有以下特点:
提供对应的TryXXX方法
提供可升级写锁特性
提供可递归的特性
不提供条件变量的用法
劳动果实,转载请注明出处:
阅读(...) 评论()是时候,换个姿势关注TA
关注 功能升级,收割 TA 的最新动态
扫我下载最新九游APP
查看: 6016|回复: 5
最后登录积分3268精华0帖子
, 经验 3268, 距离下一级还需 732 经验
我15娃红三,279红二,法宝有塔八卦珠子瓶子剑和鼎,有塔灵和卦灵,请问用什么阵容和法宝好,求具体过关的攻略
最后登录积分45564精华0帖子
建议您使用125带剑哦
您对该GM的评价:(登录并绑定手机即可获得投票机会。立刻/)
最后登录积分15392精华0帖子
, 经验 15392, 距离下一级还需 1208 经验
来自九游APP
257加八卦,159加灯,随便过
最后登录积分3268精华0帖子
, 经验 3268, 距离下一级还需 732 经验
来自九游APP
我第一关都过不了,是打断飞行怪的技能还是那个蝎子,有免疫,伤害不够,时间不够
最后登录积分3268精华0帖子
, 经验 3268, 距离下一级还需 732 经验
来自九游APP
玩了快一年,还没灯,25号给我个灯吧,让我好推图
&给了个铃铛,自动升4星,想要的一个都不给&
最后登录积分12066精华0帖子
, 经验 12066, 距离下一级还需 1534 经验
来自九游APP
159瓶子,我已经推到13了,等满装用灯试试
&没练9 1257打过红四 准备就这四个娃通关 86级&
&想把,14-13能把无数个180卡死,125很难了,还要考虑二娃出不出雷的问题。125希望渺小,&
安卓平台下载
苹果平台下载热门游戏:
近期发售:
中文游戏:
 当前位置:  >>
【多玩TVG攻略组】《重装机兵3》图文流程攻略
  本文作者 多玩TVG攻略组 - 飛飛※&伈,欢迎转载但请注明出处及作者。
  论坛原帖:
  游戏名称:重装机兵3
  游戏原名:メタルマックス3
  制作厂商:Createch
  发售厂商:角川GAMES
  游戏类型:角色扮演
  发售日期:
  游戏人数:1-2
  官方网站:
  多玩专题:
  好吧。这是我第一次接触的游戏=w= 而且这也是我第一次接触这系列的游戏。在加上日语看文字能力不太强。。。要是我有地方说错了或者漏掉了还请各位看官见谅哦-w-
  下面进入正题啦=w=
  游戏一开始,在一顿电击之后(杨叔降临么。。。),我们长得不算英俊的男主角苏醒啦,但是苏醒了之后发现自己什么都记不得了,对面的杨叔对你说,恭喜你你可以出院了(大雾。。。)。与杨叔(博士)对话后就可以进入后面的房间一顿搜刮,然后出来与门口的科学怪人对话,得知自己是从河的上游漂下来滴。于是为了寻找自己丢失的记忆,我们的男主角离开了这里。去上游开始寻找记忆之旅=w=
  刚出门记得要搜刮一下哦,虽然我们的男主角号称史上最强Lv1。不过药品这种东西还是多带点没坏处。同时也不要忘记了存档哦。
  搜刮完之后出村口。看到一男一女在吵架,正在水深火热的时候。村口外来了一辆坦克,跳出来一位光头大众脸- -#
  好像是要劫色。把小两口的那位男的打到在地,这时女的来带男主角的身边请求帮助。既然都号称史上最强Lv1了。剧情这第一个大众脸肯定是轻松搞定啦=w=
  击倒光头大众脸之后坦克里面冒出来个小弟。用坦克瞄准着男主角。我们只好无奈的看着MM被带走啦T,T
  接着,我们的旅程就正式开始啦=w=
温馨提示:您可以通过手机访问
阅读多玩TVG新闻。
看完本文后有何评价?
已有0人评价,点选表情后可看到其他玩家的表态。
<span onclick='javascript:if(document.all){clipboardData.setData("Text",location.href);this.innerHTML="[文章地址已复制]";}'
class="btn">[与更多人共享]
家用机热门论坛
PSP热门论坛
NDS热门论坛INTERLOCKED 3D孔明锁攻略:[7]1-7攻略_百度经验
&&&&&&&&&电玩/手游INTERLOCKED 3D孔明锁攻略:[7]1-7攻略听语音1234567
百度经验:jingyan.baidu.comINTERLOCKED 3D孔明锁 (iPhone游戏)孔明锁,相传是三国时期诸葛孔明根据八卦玄学的原理发明的一种玩具,曾广泛流传于民间,是中国古代传统的土木建筑固定结合器,不用钉子和绳子,完全靠自身结构的连接支撑,就像一张纸对折一下就能够立得起来,展现了一种看似简单,却凝结着不平凡的智慧。百度经验:jingyan.baidu.comiPhoneINTERLOCKED百度经验:jingyan.baidu.com1先看一下本关样子;2整体向右转一下,然后移动中间浅颜色的部分;3继续向上移动浅颜色的部分;4接着向左边移动这部分;5整体向左旋转,抽出深色的部分;6然后整体左转,7顺着轨道顺利开锁!END百度经验:jingyan.baidu.com转换一些思路搞定!|经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。投票(0)已投票(0)有得(0)我有疑问(0)◆◆说说为什么给这篇经验投票吧!我为什么投票...你还可以输入500字◆◆只有签约作者及以上等级才可发有得&你还可以输入1000字◆◆如对这篇经验有疑问,可反馈给作者,经验作者会尽力为您解决!你还可以输入500字相关经验00000热门杂志第1期你不知道的iPad技巧3700次分享第1期win7电脑那些事6536次分享第2期新人玩转百度经验1371次分享第1期Win8.1实用小技巧2628次分享第1期小白装大神1870次分享◆请扫描分享到朋友圈}

我要回帖

更多关于 interlockeddecrement 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信