我讀了很多文章說多線程應用程序必須使用每個線程單獨的會話。也許我不明白鎖定是如何工作的,但是如果我在所有存儲庫方法中對會話鎖定,是否會使單個靜態會話線程不安全?鎖定存儲庫線程中的單個會話是否安全? (NHibernate)
,如:
public void SaveOrUpdate(T instance)
{
if (instance == null) return;
lock (_session)
using (ITransaction transaction = _session.BeginTransaction())
{
lock (instance)
{
_session.SaveOrUpdate(instance);
transaction.Commit();
}
}
}
編輯:
請考慮上下文/類型的應用我寫:
不支持多用戶,而不是典型的用戶交互,但自運行機器人對諸如財務數據和訂單更新等遠程事件做出反應,並基於此執行任務和保存。間歇性地,這可以創建每秒高達10次節省的羣集。通常它是每次都需要保存的同一個對象圖。另外,在啓動時,程序會將完整的數據庫加載到實體 - 對象圖中。所以它基本上只讀取一次,然後在運行時執行SaveOrUpdates。
如果不是比multithreded爲什麼你需要鎖呢? – 2012-07-25 15:45:08
@WiktorZychla他沒有說它不是多線程。他說這不是多用戶。 – 2012-07-25 15:45:33
(我相信)每個遠程事件(來自套接字連接)創建它自己的線程。 – bretddog 2012-07-25 15:47:16