Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
⊗csSpCcIn 368 of 509 menu
◀ ▶

Interlocked в C#

Метод Interlocked.Increment меняет int или long одной атомарной инструкцией процессора. Для простого счётчика посещений полная блокировка не нужна.

Если нужно атомарно поменять несколько связанных полей сразу, одного прибавления уже мало и нужна обычная блокировка.

Два потока параллельно увеличат visits, главный дождётся обоих и проверит итог. Оба прибавления учтены. Без атомарной операции при той же схеме результат мог бы быть 1 из-за гонки:

int visits = 0; Thread a = new(() => Interlocked.Increment(ref visits)); Thread b = new(() => Interlocked.Increment(ref visits)); a.Start(); b.Start(); a.Join(); b.Join(); Console.WriteLine(visits); // выведет 2

Запустите три потока. В каждом атомарно прибавьте единицу к общему счётчику посещений. Дождитесь всех и выведите счётчик.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить