@polar_winter

Как правильно написать MutexLocker?

Создал самописную обёртку MutexLocker, согласно RAII.

class pthread_mutex_locker
{
public:
    pthread_mutex_locker(pthread_mutex_wrapper * mu);
    ~pthread_mutex_locker();

private:
    pthread_mutex_wrapper * mutex;
};


Применил свой MutexLocker c анонимным объектом.

// Тело какой-то функции.
{
 pthread_mutex_locker(&mutex);
//Какой-то код

}


Есть подзрение, что анонимный объект уничтожается раньше, чем нужно и не защищает код. Как сделать, что бы он уничтожался во время выхода из функции. Должен ли MutexLocker быть именнованным объетом? Гарантируется ли уничтожение именнованных объектов по выходу из функции,а не вдругом месте?

gcc version 4.8.1 20130909
  • Вопрос задан
  • 2422 просмотра
Пригласить эксперта
Ответы на вопрос 4
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Ваш вариант не пройдет - мьютекс будет уничтожен сразу же после создания. Строго говоря, в C++ нет такого понятия "анонимный экземпляр", есть "временный экземпляр".

Для именованного экземпляра гарантируется уничтожение при выходе за из области видимости - составного оператора {}.
Ответ написан
Комментировать
@Mercury13
Программист на «си с крестами» и не только
pthread_mutex_locker locker(&mutex);

Назови его как-нибудь, и всё будет окей.
Ответ написан
Комментировать
TrueBers
@TrueBers
Гуглю за еду
А чем не угодил std::lock_guard?
Ответ написан
AxisPod
@AxisPod
Если нет C++11, берите boost::thread.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы