NHibernate SessionFactory线程是否安全

时间:2011-01-20 18:13:37

标签: nhibernate thread-safety

根据文档,SessionFactory应该是线程安全的:

  

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

我正在查看实施情况,但我无法理解OpenSession()可以是线程安全的:

http://nhibernate.svn.sourceforge.net/viewvc/nhibernate/trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs?revision=5233&view=markup

在OpenSession()中几乎没有lock()调用。我能找到的所有无锁线程安全实现基本上都是单例。

1 个答案:

答案 0 :(得分:2)

OpenSession只返回一个新对象并从SessionFactoryImpl传入字段。这些字段似乎没有被修改任何地方(bar构造函数)所以这似乎是线程安全的。先决条件是settings.CacheProvider.NextTimestamp()sessionLocalInterceptor.SetSession(session);也是线程安全的,因为这些在一些重载的OpenSession调用中可能会发生变化。

至少有一些竞争条件的空间.Dispose /。虽然关闭。