Один из аргументов содержит лицензионные ключи, которые могут понадобиться плагину для используйте его плагины. Этот ключ следует применять только один раз.
Моя текущая реализация использует блокировку с двойной проверкой:
Код: Выделить всё
private static bool _IsLicenceApplied;
private readonly static object _IsLicenceAppliedInitializationLock = new object();
public void Method(Keys keys, object data)
{
if(!_IsLicenceApplied)
{
lock(_IsLicenceAppliedInitializationLock)
{
if(!_IsLicenceApplied)
{
Apply(keys);
}
}
}
//do the rest of the method using data
}
- должен быть нестабильным
Код: Выделить всё
_IsLicenceApplied
- следует читать и записывать с использованием методов класса Volatile
Код: Выделить всё
_IsLicenceApplied
- аналогично, но с использованием класса Interlocked
- Я должен окружить блок вызовами Thread.MemoryBarrier()
Подробнее здесь: https://stackoverflow.com/questions/792 ... in-c-sharp