.NET组件程序设计 第8章 多线程和并发管理 同步委托
2011-07-10 14:50
337 查看
.NET中调用委托前必须检查值是否为NULL,否者会引发一空引用异常。
但对于多线程环境,此种检查任然不够,因为访问委托时可能发生竞态条件。
但对于多线程环境,此种检查任然不够,因为访问委托时可能发生竞态条件。
public class Publisher { public event EventHandler MyEvent; public void Fire() { //将委托传入一个方法,目的为了拷贝委托,因此方法中检查调用的只是某一临时变量,而非原来的委托 //委托为一不可变对象,对委托所做任何改变,都将导致在堆上创建一新委托 Fire(MyEvent); } //为避免JIT优化代码,使用内联,直接使用委托对象,导致竞态条件 //使用该特性,通知JIT在任何情况下,方法参数都不要内联 [MethodImpl(MethodImplOptions.NoInlining)] private void Fire(EventHandler handler) { if(handler != null) { handler(this, EventArgs.Empty); } } }
相关文章推荐
- .NET组件程序设计 第8章 多线程和并发管理 同步线程_监视器
- .NET组件程序设计 第8章 多线程和并发管理 同步线程_可等待事件
- .NET组件程序设计 第8章 多线程和并发管理 同步线程_信号
- .NET组件程序设计 第8章 多线程和并发管理 同步线程_互斥
- .NET组件程序设计 第8章 多线程和并发管理 同步线程_互锁,读写锁
- .NET组件程序设计 第8章 多线程和并发管理 .NET多线程服务
- .NET组件程序设计 第8章 多线程和并发管理
- .NET组件程序设计之线程、并发管理(二)
- .NET组件程序设计之线程、并发管理(一)
- .Net组件程序设计之线程、并发管理(一)
- .Net组件程序设计之线程、并发管理(二)
- .NET简谈组件程序设计之(多线程与并发管理一)
- .NET组件程序设计之线程、并发管理(二)
- .NET组件程序设计 第4章 生命周期管理
- .NET简谈组件程序设计之(上下文与同步域)
- 第二十三节: EF性能篇(三)之基于开源组件 Z.EntityFrameWork.Plus.EF6解决EF性能问题 第四节:一些指令总结 定时调度系列之Quartz.Net详解 第十七节:易混淆的概念(静态和非静态、拆箱和装箱) 那些年我们一起追逐的多线程(Thread、ThreadPool、委托异步调用、Task/TaskFactory、Parallerl、async和await)
- .NET简谈组件程序设计之(初识NetRemoting)
- .NET组件程序设计 第10章 远程处理
- .Net组件程序设计
- lock Mutex Monitor 之间的区别与详解, .net 多线程 同步异步操作,锁