
Решение задачи читателей-писателей с помощью барьера
1️⃣ Мы создаем concurrent очередь*
2️⃣ Добавляем барьер на запись
3️⃣ Добавляем синхронный вызов на чтение
Получается, что поставив барьер на запись, мы дожидаемся пока все задачи в очереди на запись выполнятся, и потом синхронно получаем данные к текущему ресурсу
❌ Запомните, что global и serial очереди не лучший выбор для барьеров
1) Serial очередь ведет себя также, как и барьерная очередь. Поэтому особого импакта мы не заметим
2) С global очередями у нас меньше контроля и скорее всего мы не сможем синхронизовать данные
✅ Лучший вариант (единственно верный) это кастомные concurrent очереди
1️⃣ Мы создаем concurrent очередь*
2️⃣ Добавляем барьер на запись
3️⃣ Добавляем синхронный вызов на чтение
Получается, что поставив барьер на запись, мы дожидаемся пока все задачи в очереди на запись выполнятся, и потом синхронно получаем данные к текущему ресурсу
❌ Запомните, что global и serial очереди не лучший выбор для барьеров
1) Serial очередь ведет себя также, как и барьерная очередь. Поэтому особого импакта мы не заметим
2) С global очередями у нас меньше контроля и скорее всего мы не сможем синхронизовать данные
✅ Лучший вариант (единственно верный) это кастомные concurrent очереди