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

Тип Lock в C#

В новых версиях .NET тип System.Threading.Lock заменяет произвольный объект, на котором потоки ждут своей очереди. В примере он стоит в операторе lock: вход в блок занимает блокировку, а выход из блока её отпускает.

Синхронизатор должен быть одним и тем же объектом для всех потоков. Lock - класс, поэтому ссылка стабильна. Если блокировать упакованный значимый тип, каждый вход получит свой монитор и секция перестанет быть общей.

Два потока добавят элементы в общий список под одной блокировкой. После ожидания обоих в списке два элемента, они не потерялись при параллельной записи:

using System.Threading; List<int> items = new(); Lock gate = new(); void Add(int value) { lock (gate) { items.Add(value); } } Thread a = new(() => Add(1)); Thread b = new(() => Add(2)); a.Start(); b.Start(); a.Join(); b.Join(); Console.WriteLine(items.Count); // выведет 2

В одном потоке добавьте в общий список строку "red", в другом - строку "blue". Дождитесь обоих и выведите, сколько элементов оказалось в списке.

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