Junior — Middle
Czy możesz wymienić istniejące typy wzajemnych wykluczeń (mutex)?
sobes.tech AI
Odpowiedź od AI
Istnieją różne typy mutexów (mutual exclusion) w C/C++, które różnią się implementacją i możliwościami:
- Prosty (zwykły) mutex — podstawowy mechanizm blokowania zapewniający wyłączny dostęp do zasobu.
- Mutex rekurencyjny — pozwala temu samemu wątkowi na wielokrotne przejęcie mutexu bez wzajemnego blokowania się.
- Mutex z czasem oczekiwania — mutex, który można próbować przejąć z limitem czasowym.
- Mutex z obsługą błędów — mutex, który sprawdza błędy, np. wielokrotne przejęcie przez ten sam wątek wywołuje błąd.
W standardowej bibliotece C++11 dostępne są następujące typy:
std::mutexstd::recursive_mutexstd::timed_mutexstd::recursive_timed_mutex
Przykład użycia std::recursive_mutex:
#include <mutex>
std::recursive_mutex mtx;
void recursive_function(int count) {
mtx.lock();
if (count > 0) {
recursive_function(count - 1);
}
mtx.unlock();
}
Wybór typu mutexu zależy od zadania i wymagań dotyczących blokowania.