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

ConcurrentQueue в C#

Класс ConcurrentQueue - потокобезопасная очередь: элемент, поставленный раньше, выходит раньше. Несколько производителей могут вызывать Enqueue, несколько потребителей - TryDequeue без внешнего lock.

Метод TryDequeue возвращает false на пустой очереди вместо исключения. Порядок сохраняется для элементов одного производителя. Если ставят несколько потоков сразу, порядок между ними не фиксирован.

Поставим два числа и снимем оба. Сняли 1 и 2 в порядке постановки, их сумма равна 3. Третий съём с пустой очереди вернул бы false:

using System.Collections.Concurrent; ConcurrentQueue<int> q = new(); q.Enqueue(1); q.Enqueue(2); q.TryDequeue(out int first); q.TryDequeue(out int second); Console.WriteLine(first + second); // выведет 3

Поставьте в очередь строки "red" и "blue", "red" первой. Снимите обе и выведите их в консоль через пробел в порядке выхода.

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