У Ruby та багатьох інших мов програмування термін “Mutex” вказує на “взаємовиключення” (Mutex - абревіатура від “mutual exclusion”). Mutex є механізмом синхронізації, призначеним для захисту від доступу до ресурсів з багатьох потоків або процесів. Основна ідея полягає в тому, щоб забезпечити, що тільки один потік (або процес) може отримати доступ до критичної секції коду в певний момент часу.
У Ruby використовується клас Mutex для реалізації взаємовиключення. Ось простий приклад використання Mutex
.
mutex = Mutex.new
# Код, який використовує ресурс, за яким потрібно вести взаємовиключення
counter = 0
# Функція, яка змінює значення лічильника, використовуючи Mutex
def increment_counter(mutex, counter)
mutex.synchronize do
# Критична секція коду, яка захищена від одночасного доступу
counter += 1
end
end
# Запускаємо кілька потоків, які викликають функцію increment_counter
threads = []
5.times do
threads << Thread.new do
1000.times { increment_counter(mutex, counter) }
end
end
# Чекаємо завершення всіх потоків
threads.each(&:join)
puts "Final counter value: #{counter}"
У цьому прикладі Mutex
використовується для синхронізації доступу до змінної counter
з різних потоків, щоб уникнути проблем конкурентного доступу.