Commit 9c111842 authored by Max Kellermann's avatar Max Kellermann

thread/Mutex: use std::unique_lock to implement ScopeLock

parent a421c1db
/*
* Copyright (C) 2009-2015 Max Kellermann <max@duempel.org>
* Copyright (C) 2009-2016 Max Kellermann <max@duempel.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
......@@ -30,6 +30,8 @@
#ifndef THREAD_MUTEX_HXX
#define THREAD_MUTEX_HXX
#include <mutex>
#ifdef WIN32
#include "CriticalSection.hxx"
......@@ -43,26 +45,13 @@ class Mutex : public PosixMutex {};
#endif
class ScopeLock {
Mutex &mutex;
bool active = true;
std::unique_lock<Mutex> lock;
public:
ScopeLock(Mutex &_mutex):mutex(_mutex) {
mutex.lock();
};
~ScopeLock() {
if (active)
mutex.unlock();
};
ScopeLock(const ScopeLock &other) = delete;
ScopeLock &operator=(const ScopeLock &other) = delete;
ScopeLock(Mutex &_mutex):lock(_mutex) {}
void Unlock() {
mutex.unlock();
active = false;
lock.unlock();
}
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment