.Net拾穗(一)

1) HandleProcessCorruptedStateExceptionsAttribute

这是CLR4.0的东西,在程序中会有一些"超级"异常,是指操作系统提出的未捕获异常,这些异常无法被普通的catch捕获,如果想要catch可以捕获这些异常,只要给catch所在方法打上这个标签就可以了。

2)  Thread.BeginCriticalRegion(); Thread.EndCriticalRegion();

在这个代码区域中的错误不仅仅影响到本线程,因此这个区域的异常如果不被捕获就可能宿主会卸载AppDomain。比如在读写锁中就用到了这个。

3)  [MethodImpl(MethodImplOptions.Synchronized | MethodImplOptions.NoInlining)]
   void SomeMethod(string str)

这个属性大家一看都知道说的是什么意思,需要注意的是什么时候用MethodImplOptions.NoInlining。NoInlining,也就是要保持函数调用堆栈。

4) Thread.MemoryBarrier();

只有在弱顺序多处理器系统(例如,使用多个 Intel Itanium 处理器的系统)上 MemoryBarrier 才是必需的。防止代码的执行顺序被多处理器优化导致颠倒。加上这一行之后,barrier前面部分的代码一定会在barrier后面部分的代码执行前执行完。

3,4的例子可以看System.Threading.Thread.VolatileWrite/VolatileRead系列方法。

 

 

5)基本的同步锁有两种,自旋锁和信号量。

自旋锁就是用一个空循环来阻止线程,等待其他线程释放资源。

而信号量需要用到系统中断,会切换线程上下文,开销极大。

clr的典型应用在读写锁里面,首先用自旋锁,如果迟迟不能获得执行权限则会升级为信号量。

转载于:https://www.cnblogs.com/yuanpu/archive/2012/02/07/DotNetStudy.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值