我對c#和OOP一般都很陌生,非常感謝你對此的幫助。現在我正在開發供應商平臺,爲我們提供一套API。我的代碼中有幾個事件處理程序調用了相同的方法。在這種方法中,我有一些關鍵的全局變量。c#多個事件的相同事件處理程序
這裏的問題是我需要通過實現互斥鎖等來使這個函數線程安全嗎?我明白,如果我有幾個線程調用相同的功能,我必須這樣做。雖然我不確定事件。
感謝您的閱讀。
我對c#和OOP一般都很陌生,非常感謝你對此的幫助。現在我正在開發供應商平臺,爲我們提供一套API。我的代碼中有幾個事件處理程序調用了相同的方法。在這種方法中,我有一些關鍵的全局變量。c#多個事件的相同事件處理程序
這裏的問題是我需要通過實現互斥鎖等來使這個函數線程安全嗎?我明白,如果我有幾個線程調用相同的功能,我必須這樣做。雖然我不確定事件。
感謝您的閱讀。
我假設您的「供應商平臺」是您在項目中引用的.Net程序集。如果不是這種情況(例如它是您使用的Web服務),那麼這個答案將不準確,您應該更新您的問題並提供更多有關您的案例的信息。
它實際上取決於。
如果供應商平臺是多線程的,那麼你的一些事件處理程序可以同時在多個線程調用作爲第三方的lib可能會觸發來自不同線程的事件。然後你必須保護對你方法的訪問。
如果第三方庫是單線程的,那麼它保證所有的事件都會在同一個線程中被觸發,因此所有的事件處理程序都會被一個接一個地調用,而且你不需要保護你的併發訪問方法。
總之,如果你正在引用「全局變量」你需要保護與鎖(鎖)或ReaderWriterLockShim對它們的訪問,如
private static Dictionary<string, PerformanceCounter> _counters;
private static ReaderWriterLock rwl = new ReaderWriterLock();
public static void SetCounterValue(object aName, long aValue)
{
string key = aName.ToString();
try
{
rwl.AcquireWriterLock(Timeout.Infinite);
PerformanceCounter counter = _counters[key];
counter.RawValue = aValue;
}
finally { rwl.ReleaseWriterLock(); }
}