LazyThreadSafetyMode的文档指出,如果初始化方法(或默认构造函数,如果没有初始化方法)在内部使用锁,则使用值ExecutionAndPublication可能会导致死锁。我试图更好地理解使用此值时可能导致死锁的示例。在使用这个值时,我正在初始化一个ChannelFactory。我无法看到ChannelFactory的构造函数使用任何内部锁(使用Reflector检查类),所以我认为这种情况不适合可能的死锁情况,但我很好奇哪些情况可能导致死锁,以及是否有可能死锁初始化ChannelFactory。懒惰<T> ExecutionAndPublication - 可能导致死锁的示例
因此,要总结,我的问题是:
是否有可能导致死锁初始化使用ExecutionAndPublication的的ChannelFactory?
什么是使用ExecutionAndPublication导致死锁初始化其他对象的一些可能的方法?
假设你有下面的代码:
class x
{
static Lazy<ChannelFactory<ISomeChannel>> lcf =
new Lazy<ChannelFactory<ISomeChannel>>(
() => new ChannelFactory<ISomeChannel>("someEndPointConfig"),
LazyThreadSafetyMode.ExecutionAndPublication
);
public static ISomeChannel Create()
{
return lcf.Value.CreateChannel();
}
}
伟大的答案@svick - 以相反的顺序获取的嵌套锁的经典示例,这是沿着我的想法 - 伟大的例子来澄清场景,谢谢! – dugas 2011-05-29 20:56:50