您的位置:首页 > 其它

.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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐