Вхід Реєстрація
Реклама
Ваше рекламне місце
Забронюйте цей слот без конкуренції на обраний період.
Купити рекламу →
Логотип телеграм спільноти - Затишна Галера
Додано 06 січ 2025

Затишна Галера

@Zatishna_Galera
Кількість підписників: 2 703
Фото: 1,360
Відео: 432
Посилання: 1,830
Опис:
Голова Одеського центру розробки DataArt та Delivery Director, капітан Затишної Галери, ділитимуся: завданнями із співбесід (QA/Delivery/Management), статтями, вакансіями, новинами зі світу IT. Контакт: [email protected] ; Patreon: patreon.com/CozyGalley
Джерело

Затишна Галера | iOSКомпас 🧭1️⃣4️⃣8️⃣ Завдання 148Що таке м’ютекс (mutex)?Починаємо моб...

Логотип телеграм спільноти - Затишна Галера Затишна Галера @Zatishna_Galera
487 Охват/переглядів 2026-04-01 10:35 Повідомлення №2550
#iOSКомпас 🧭1️⃣4️⃣8️⃣ Завдання 148Що таке м’ютекс (mutex)?Починаємо мобільну середу! З вами знову той самий автор каналу @badlinkschannel. Сподіваюсь вам ще не набридла ця ідея капітана галери про iOS розробника.🤔 М’ютекс (від англ. «mutex» - mutual exclusion, взаємне виключення) - це механізм синхронізації, який використовується у багатопотоковому програмуванні для запобігання одночасному доступу кількох потоків до спільних ресурсів, таких як змінні, структури даних або файли. Він допомагає уникнути стану гонки (race condition), коли результат виконання програми залежить від невизначеного порядку доступу потоків до ресурсу.🔣 Основні концепції м’ютекса🔣 Взаємне виключенняМ’ютекс забезпечує доступ до спільного ресурсу лише одному потоку в кожен момент часу. Коли один потік захоплює м’ютекс, інші потоки повинні чекати, поки м’ютекс не буде звільнений.🔣 Захоплення і звільненняПотік захоплює м’ютекс перед доступом до спільного ресурсу і звільняє його після завершення роботи з цим ресурсом. Якщо м’ютекс уже захоплений іншим потоком, поточний потік буде заблокований доти, поки м’ютекс не буде звільнений.🤓 Приклад використання м’ютекса в Swiftimport Foundationclass SafeCounter { private var value = 0 private let lock = NSLock() func increment() { lock.lock() value += 1 lock.unlock() } func getValue() -> Int { lock.lock() let currentValue = value lock.unlock() return currentValue }}let counter = SafeCounter()let group = DispatchGroup()for _ in 0..<2 { DispatchQueue.global().async(group: group) { for _ in 0..<1000 { counter.increment() } }}group.wait()print("Final counter value: \(counter.getValue())") 🔣 Плюси і мінуси👍 Безпека данихМ’ютекси захищають спільні ресурси від одночасного доступу, запобігаючи пошкодженню даних.👍 ПередбачуваністьКод стає більш передбачуваним і стабільним, оскільки виключаються стани гонки.😡 Мертві блокування (Deadlocks)Якщо м’ютекси захоплюються у неправильному порядку, це може призвести до ситуації, коли два або більше потоків блокують один одного, очікуючи звільнення м’ютексів.😡 ПродуктивністьНадмірне використання м’ютексів може призвести до зниження продуктивності через збільшення часу очікування потоків.@Zatishna_Galera