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 * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions * modification, are permitted provided that the following conditions
...@@ -30,6 +30,8 @@ ...@@ -30,6 +30,8 @@
#ifndef THREAD_MUTEX_HXX #ifndef THREAD_MUTEX_HXX
#define THREAD_MUTEX_HXX #define THREAD_MUTEX_HXX
#include <mutex>
#ifdef WIN32 #ifdef WIN32
#include "CriticalSection.hxx" #include "CriticalSection.hxx"
...@@ -43,26 +45,13 @@ class Mutex : public PosixMutex {}; ...@@ -43,26 +45,13 @@ class Mutex : public PosixMutex {};
#endif #endif
class ScopeLock { class ScopeLock {
Mutex &mutex; std::unique_lock<Mutex> lock;
bool active = true;
public: public:
ScopeLock(Mutex &_mutex):mutex(_mutex) { ScopeLock(Mutex &_mutex):lock(_mutex) {}
mutex.lock();
};
~ScopeLock() {
if (active)
mutex.unlock();
};
ScopeLock(const ScopeLock &other) = delete;
ScopeLock &operator=(const ScopeLock &other) = delete;
void Unlock() { void Unlock() {
mutex.unlock(); lock.unlock();
active = false;
} }
}; };
......
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