Я правильно реализую класс блокировки Mutex через RAII? - PullRequest
0 голосов
/ 15 октября 2019

Я смотрю видео о мьютексе и RAII.

В видео автор объясняет, что хорошее приложение RAII (использующее объект для управления ресурсом) - это мьютекс. У него есть следующий класс:

class Lock {
    private:
       Mutext_t* m_pm;
    public:
       explicit Lock(Mutex_t* pm) { Mutex_lock(pm); m_pm = pm; };
       ~Lock() { Mutex_unlock(m_pm); };
};

Я не уверен, как он реализовал Mutex_unlock и Mutex_lock.

Мой вопрос: Сопоставима ли следующая реализация, идостигнет ли он желаемого результата разблокировки мьютекса, если функция, для которой создается объект класса, создает исключение?

mutex mu;

class Lock { // Lock will be destroyed if stack is unwound
    private:
        mutex* p_Mutex;

    public:
        explicit Lock(mutex* Mutex) {
            lock_guard<mutex> u_Lock(*Mutex);
            p_Mutex = Mutex;
            };
};

void functionB() {
    Lock myLock(&mu);
    // .. Do stuff that throws an error.
    // Unwind stack and destroy myLock, unlocking the mutex?
}

Это очень простая реализация для целей обучения. Спасибо за вашу помощь.

...