2011-05-10 109 views
1

是否有有關調用unmanaged代碼時使用多線程的一些普遍性的建議?C#線程問題

我隨機收到訪問衝突錯誤,顯然挖入unmanaged代碼沒有多大意義。

是否有一些方法我可以嘗試的,而不是把這些調用到某種一個critical section,以消除衝突錯誤?

+1

訪問衝突錯誤並不一定是* *的多線程問題,至少不是當你寫不安全代碼的結果。你是否明確地創建了多個線程,還是隻是假設它一定是問題?調試器告訴你什麼? – 2011-05-10 13:49:31

回答

1

這取決於您所調用的非託管組件是否已編程爲線程安全。

如果並行調用這個代碼,只有當獲得訪問衝突,它看起來像你正在使用的不是線程安全的組件。

使用C#lock()聲明,以確保安全:

private static readonly myLockObject = new object(); 

... 

lock (myLockObject) 
{ 
    CallMyUnsafeCode(); 
} 
+1

那麼,我最終意味着什麼時候談論「關鍵部分」。不管怎麼說,還是要謝謝你 – 2011-05-10 13:53:09