Iniciar sesión Registro
Anuncios
Tu espacio publicitario
Reserva este slot exclusivo para el periodo elegido.
Comprar publicidad →
Logotipo de la comunidad de telegram - Затишна Галера
Añadido 06 ene. 2025 🌐 UK

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

@Zatishna_Galera
Número de suscriptores: 2 690
Fotos: 1,570
Videos: 475
Enlaces: 2,090
Descripción:
Голова Одеського центру розробки DataArt та Delivery Director, капітан Затишної Галери, ділитимуся: завданнями із співбесід (QA/Delivery/Management), статтями, вакансіями, новинами зі світу IT. Контакт: [email protected] ; Patreon: patreon.com/CozyGalley
Fuente

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

Logotipo de la comunidad de telegram - Затишна Галера Затишна Галера @Zatishna_Galera
487 Vistas/Alcance 2026-04-01 10:35 Mensaje №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