NHibernate SessionFactory线程安全吗

NHibernate SessionFactory线程安全吗,nhibernate,thread-safety,Nhibernate,Thread Safety,根据文件,SessionFactory应为螺纹安全型: ISessionFactory是线程安全的,许多线程可以同时访问它并请求iSession 我正在研究实现,但我不明白例如OpenSession()是如何实现线程安全的: 在OpenSession()中只有很少的lock()调用,但什么都没有。我能找到的所有无锁线程安全实现基本上都是单例的。OpenSession只返回一个新对象,并从SessionFactoryImpl传入字段。这些字段似乎在任何地方都不会被修改(除了构造函数),因此这看起

根据文件,SessionFactory应为螺纹安全型:

ISessionFactory是线程安全的,许多线程可以同时访问它并请求iSession

我正在研究实现,但我不明白例如OpenSession()是如何实现线程安全的:


在OpenSession()中只有很少的lock()调用,但什么都没有。我能找到的所有无锁线程安全实现基本上都是单例的。

OpenSession只返回一个新对象,并从SessionFactoryImpl传入字段。这些字段似乎在任何地方都不会被修改(除了构造函数),因此这看起来是线程安全的。先决条件是
settings.CacheProvider.NextTimestamp()
sessionLocalAcceptor.SetSession(会话)也是线程安全的,因为它们在一些重载的OpenSession调用中可能会发生更改


至少在.Dispose/.Close上存在一些争用条件的空间。

查看代码时,第一个线程不可能正在执行第1126行,而第二个线程将执行第1123行。这意味着第二个线程将在第一个线程调用sessionLocalInterceptor.SetSession(会话)之前覆盖会话创建;它不会覆盖方法体中使用的变量。@匿名局部变量位于堆栈上,且堆栈为每个线程。ThreadSafe!=使用锁/单例