我对c#和OOP很陌生,非常感谢您在这方面的帮助。现在我正在一个供应商平台上工作,该平台提供了一组API供我们使用。我的代码中有几个事件处理程序调用相同的方法。在这个方法中,我有一些关键的全局变量。
这里的问题是,我需要通过实现互斥等来确保这个函数线程的安全吗。。?我知道若我有多个线程调用同一个函数,我就必须这么做。不过我不确定事件。
感谢阅读。
我假设您的"供应商平台"是您在项目中引用的.Net程序集。如果不是这样(例如,你使用的是一个网络服务),那么这个答案将是不准确的,你可能应该用更多关于你的案例的信息来更新你的问题
这实际上取决于情况。
-
如果供应商平台是多线程的,那么您的一些事件处理程序可以在多个线程中同时调用,因为您的第三方库可能会从不同的线程激发事件。然后,您必须保护对方法的访问。
-
如果第三方lib是单线程的,那么可以保证所有事件都将在同一个线程中激发,因此所有事件处理程序都将被一个接一个地调用,并且您不需要保护您的方法不受并发访问的影响。
简而言之,如果您引用"全局变量",则需要使用锁(lock)或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(); }
}