Назад к вопросам
Junior — Middle
83
Можете объяснить, что означает термин 'мьютекс' и как он используется для синхронизации потоков?
Компании, где спрашивали
Телкор
ГК Адепт
Ответ от нейросети
sobes.tech AI
Мьютекс (mutex, от "mutual exclusion") — это механизм синхронизации, который используется для предотвращения одновременного доступа нескольких потоков к общему ресурсу (например, к переменной или структуре данных). Он гарантирует, что в один момент времени только один поток может владеть мьютексом и выполнять критическую секцию кода.
Принцип работы:
- Поток пытается захватить мьютекс перед работой с общим ресурсом.
- Если мьютекс свободен, поток захватывает его и продолжает работу.
- Если мьютекс уже захвачен другим потоком, текущий поток блокируется и ждет освобождения.
- После завершения работы с ресурсом поток освобождает мьютекс, позволяя другим потокам продолжить.
Пример на C++ с использованием std::mutex:
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
int counter = 0;
void increment() {
mtx.lock(); // захват мьютекса
++counter;
std::cout << "Counter: " << counter << std::endl;
mtx.unlock(); // освобождение мьютекса
}
int main() {
std::thread t1(increment);
std::thread t2(increment);
t1.join();
t2.join();
return 0;
}
В этом примере мьютекс защищает переменную counter от одновременного изменения несколькими потоками, предотвращая состояние гонки.