Да, это выглядит безопасно, потому что int
здесь атомный тип.Но я бы все же посоветовал заменить
private static int _isSampling;
на
private static object _samplingLock = new object();
и использовать:
lock(_samplingLock)
{
Sample sample = new Sample();
sample.PerformSampling(automation);
_lastSample = sample;
}
Просто потому, что это рекомендуемый шаблон, а также обеспечивает доступ ко всем_lastSample обрабатывается правильно.
Примечание: я ожидаю сопоставимой скорости, блокировка использует управляемый класс Monitor, который использует внутреннюю блокировку.
Редактировать:
Я пропустил аспект отсрочки, вот другая версия:
if (System.Threading.Monitor.TryEnter(_samplingLock))
{
try
{
.... // sample stuff
}
finally
{
System.Threading.Monitor.Exit(_samplingLock);
}
}