Во многих ****ах есть такая операция, как увеличение счётчика, например "количество проверенных" или "количество гудов". В качестве примеров будем использовать переменную count_checked Для начала рассмотрим печальный вариант, но все же встречающийся в проектах иногда: count_checked++; Код count_checked++; Эта операция не потокобезопасна! Так писать нельзя. Более продвинутые пользователи используют оператор lock: В начале класса создают объект Object lockThis = new Object(); Код Object lockThis = new Object(); И где-то внутри метода пишут что-то подобное: lock (lockThis) { count_checked++; } Код lock (lockThis) { count_checked++; } Это рабочий вариант, но устаревший и не производительный. Для быстрого и безопасного увеличения счетчика (+1) используйте оператор Interlocked.Increment Interlocked.Increment(ref this.count_checked); Код Interlocked.Increment(ref this.count_checked); Вместо count_checked пишите свою переменную. Также имеется аналогичный оператор Interlocked.Decrement для уменьшения счётчика на единицу (-1) Interlocked.Decrement(ref this.count_lost); Код Interlocked.Decrement(ref this.count_lost); Вместо count_lost (типо "сколько осталось") пишите свою переменную.
Шта? Кейворд lock это синтаксический сахарок над типом Monitor, и я бы поспорил что вариант через Interlocked работает быстрее, ибо значимый тип передается по ссылке, а boxing/unboxing одна из самых ресурсоемких операций при работе с различными типами в C#