/* * DSFML - SFML Library binding in D language. * Copyright (C) 2008 Julien Dagorn (sirjulio13@gmail.com) * * This software is provided 'as-is', without any express or * implied warranty. In no event will the authors be held * liable for any damages arising from the use of this software. * * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute * it freely, subject to the following restrictions: * * 1. The origin of this software must not be misrepresented; * you must not claim that you wrote the original software. * If you use this software in a product, an acknowledgment * in the product documentation would be appreciated but * is not required. * * 2. Altered source versions must be plainly marked as such, * and must not be misrepresented as being the original software. * * 3. This notice may not be removed or altered from any * source distribution. */ module dsfml.system.lock; import dsfml.system.mutex; /** * Encapsulation of an critical section. Unlocking is guaranteed when the Lock goes out of scope, even on exception. * * Remarks: * Lock is a scope class, you need to mark Lock object as scope : * * ----------------- * Mutex m = new Mutex; * //.. * { * scope Lock l = new Lock(m); * // Critical section * } // End of critical (Destructor called and mutex unlocked) * //.. * * ----------------- */ scope class Lock { /** * Construct the lock and lock the mutex */ this(Mutex m) { m_mutex = m; m_mutex.lock(); } ~this() { m_mutex.unlock(); } private: Mutex m_mutex; }