1
正如書名我這種情況可選的線程安全(線程只有在條件安全部分)
lock (_myLockObj)
{
// protected section here (select + update over SQL Tables)
}
這偉大工程說明,但有時我不需要線程安全的,因爲是由金銀幣沒有保證錯誤可能發生(即使兩個線程運行在parralel中)但我需要速度。 目前,程序可以理解線程何時可能存在線程安全問題,何時不可以(以及何時不需要儘可能快)。
我會達到的目標是鎖定指令的optionallity,所以只有在適當的條件下才能生效。
如:
lock (_myLockObj) && flag
我敢肯定,鎖定關鍵字不提供語義,我會明白是什麼,是實現這一行爲的正確方法。
,你的意思是,你知道,鎖定對象不可能被鎖定:
您可以直接使用這些方法呢?或者你的意思是它可以被鎖定,但是你仍然不需要獲得它? (如果是後者,爲什麼不通過使鎖更細粒度來解決問題?) –
我的方法完全是線程安全的,所以通常我不需要鎖定。 什麼不是線程安全的是使用linq進行的表操作,因爲數據庫是每個線程的共享資源。 可能會發生兩個線程嘗試對相同數據提交兩種截然不同的操作,這是一個問題。 這種情況很少見,我可以理解它什麼時候會發生,什麼時候肯定不能發生(大多數數據只需要插入並保證是一次插入)。 當我確信它不可能發生,我wuold避免鎖定isntruction(獲得速度) – Skary
@Skary它可能會更好地處理它使用數據庫事務,而不是線程同步。 –