根据文档,SessionFactory应该是线程安全的:
ISessionFactory是线程安全的,许多线程可以同时访问它并请求ISessions。
我正在查看实施情况,但我无法理解OpenSession()可以是线程安全的:
在OpenSession()中几乎没有lock()调用。我能找到的所有无锁线程安全实现基本上都是单例。
答案 0 :(得分:2)
OpenSession只返回一个新对象并从SessionFactoryImpl传入字段。这些字段似乎没有被修改任何地方(bar构造函数)所以这似乎是线程安全的。先决条件是settings.CacheProvider.NextTimestamp()
和sessionLocalInterceptor.SetSession(session);
也是线程安全的,因为这些在一些重载的OpenSession调用中可能会发生变化。
至少有一些竞争条件的空间.Dispose /。虽然关闭。