Sobes.tech
Назад к вопросам
Junior — Middle
85

Какие отличия существуют между механизмом взаимной блокировки Mutex и активным ожиданием Spinlock?

Компании, где спрашивали
ГК Адепт

Ответ от нейросети

sobes.tech AI

Mutex (взаимная блокировка) — это механизм синхронизации, который блокирует поток, если ресурс занят, и переводит его в состояние ожидания, освобождая процессор. Spinlock (активное ожидание) — это блокировка, при которой поток в цикле постоянно проверяет доступность ресурса, не уступая процессор.

Основные отличия:

  • Использование процессорного времени: Mutex освобождает CPU, когда поток ждет, Spinlock активно использует CPU, что может привести к излишней нагрузке.
  • Производительность: Spinlock эффективен при очень коротких критических секциях, где ожидание минимально, иначе приводит к потере ресурсов.
  • Применение: Mutex подходит для длительных блокировок и многозадачных систем, Spinlock — для низкоуровневых, высокопроизводительных задач, где переключение контекста дорого.

Пример использования Spinlock на C++:

#include <atomic>

class Spinlock {
    std::atomic_flag flag = ATOMIC_FLAG_INIT;
public:
    void lock() {
        while (flag.test_and_set(std::memory_order_acquire)) {
            // активное ожидание
        }
    }
    void unlock() {
        flag.clear(std::memory_order_release);
    }
};