Що таке Mutex в Ruby?

У 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 з різних потоків, щоб уникнути проблем конкурентного доступу.