Login Sign Up
Advert
Your ad spot
Reserve this exclusive slot for the selected period.
Buy advertising →
Telegram community logo - Затишна Галера
Added 06 Jan 2025 🌐 UK

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

@Zatishna_Galera
Number of subscribers: 2 690
Photos: 1,570
Videos: 475
Links: 2,090
Description:
Голова Одеського центру розробки DataArt та Delivery Director, капітан Затишної Галери, ділитимуся: завданнями із співбесід (QA/Delivery/Management), статтями, вакансіями, новинами зі світу IT. Контакт: [email protected] ; Patreon: patreon.com/CozyGalley
Source

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

Telegram community logo - Затишна Галера Затишна Галера @Zatishna_Galera
487 Views/Reach 2026-04-01 10:35 Message №2550
#iOSКомпас 🧭1️⃣4️⃣8️⃣ Завдання 148Що таке м’ютекс (mutex)?

Починаємо мобільну середу! З вами знову той самий автор каналу @badlinkschannel. Сподіваюсь вам ще не набридла ця ідея капітана галери про iOS розробника.

🤔 М’ютекс (від англ. «mutex» - mutual exclusion, взаємне виключення) - це механізм синхронізації, який використовується у багатопотоковому програмуванні для запобігання одночасному доступу кількох потоків до спільних ресурсів, таких як змінні, структури даних або файли. Він допомагає уникнути стану гонки (race condition), коли результат виконання програми залежить від невизначеного порядку доступу потоків до ресурсу.

🔣 Основні концепції м’ютекса🔣 Взаємне виключення

М’ютекс забезпечує доступ до спільного ресурсу лише одному потоку в кожен момент часу. Коли один потік захоплює м’ютекс, інші потоки повинні чекати, поки м’ютекс не буде звільнений.

🔣 Захоплення і звільнення

Потік захоплює м’ютекс перед доступом до спільного ресурсу і звільняє його після завершення роботи з цим ресурсом. Якщо м’ютекс уже захоплений іншим потоком, поточний потік буде заблокований доти, поки м’ютекс не буде звільнений.

🤓 Приклад використання м’ютекса в Swift import 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