Fuente
Затишна Галера | iOSКомпас 🧭1️⃣2️⃣2️⃣ Завдання 122Що таке бар’єри?Доброго здровля мої л...
729 Vistas/Alcance
2025-10-01 12:05
Mensaje №2153
#iOSКомпас 🧭1️⃣2️⃣2️⃣ Завдання 122Що таке бар’єри?Доброго здровля мої любі друзі. З вами ваш незмінний ios розробник Сергій з @badlinkschannel.🤔 Barrier - це механізм синхронізації потоків, який дозволяє контролювати порядок виконання операцій у багатопотоковому середовищі.🔣 Memory BarriersВикористовуються у багатопоточному програмуванні для керування порядком операцій із пам’яттю.У багатопотоковому середовищі процесори й компілятори можуть змінювати порядок команд задля оптимізації, що може призвести до непередбачуваної поведінки. Бар’єри пам’яті запобігають цьому.#include <stdatomic.h>atomic_int sharedValue = 0;void updateValue() { atomic_store_explicit(&sharedValue, 10, memory_order_release);}void readValue() { int value = atomic_load_explicit(&sharedValue, memory_order_acquire);}
🔣 Бар’єри в GCD (dispatch_barrier)Використовуються у Grand Central Dispatch (GCD) для контролю порядку виконання завдань у паралельній черзі (DispatchQueue з атрибутом .concurrent).➖ Дозволяють синхронізувати доступ до ресурсу, блокуючи чергу на час виконання завдання.➖ Усі завдання до бар’єра виконуються паралельно.➖ Бар’єр чекає завершення всіх попередніх завдань, виконується ексклюзивно, а потім дозволяє наступним завданням продовжити роботу.let queue = DispatchQueue(label: "com.example.concurrent", attributes: .concurrent)queue.async { print("Завдання 1")}queue.async { print("Завдання 2")}// БАР'ЄРНА ОПЕРАЦІЯqueue.async(flags: .barrier) { print("Бар'єр: усі попередні завдання завершені, виконуюсь один!")}queue.async { print("Завдання 3")}
@Zatishna_Galera