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