我有一個從多線程調用的方法。每個線程都有自己的類實例。什麼是最直接的同步代碼訪問的方式?如何將多線程調用同步到同一方法
我不能僅僅使用lock(obj)
其中obj
是一個實例成員,但是在類上聲明obj
爲靜態就足夠了嗎?所以對該方法的所有調用都會鎖定在同一個對象上?一個簡單的例子如下:
class Foo
{
static object locker = new object();
public void Method()
{
lock(locker)
{
//do work
}
}
}
編輯://do work
位被寫入到數據庫中。爲什麼我需要序列化這些寫入操作需要3頁才能解釋這個特殊情況,我真的不想重溫所有讓我明白這一點的細節。我所要做的就是確保每個記錄在寫完下一個記錄之前完成寫作。
如果每個線程都有它們自己的類實例,如果它不觸及實例或全局之間共享的內容,則不需要鎖定對方法的調用。如果觸摸這樣的事情,也許這是他們應該鎖定的訪問權限,而不是整個方法。 – 2010-09-14 20:16:00
你可以在http://www.albahari.com/threading/ – Patrick 2010-09-14 20:27:07
瞭解很多有關C#線程(包括鎖)的知識。正確的同步方法是*解決由於錯誤同步引起的問題*的方法。您正在尋求解決方案,但沒有說明問題。 *你試圖解決的問題是什麼?例如,當另一個線程通過修改該狀態的一半時,一個線程是否會讀取不一致的狀態?是不是你可能觀察到在IA64上相互讀取和寫入亂序?說明你正試圖解決的問題,有人可以幫你解決問題;不要讓人猜測問題是什麼。 – 2010-09-14 21:04:46