Files
libsst/Include/ZUtil/ZMutex.hpp
2026-04-03 00:22:39 -05:00

92 lines
1.4 KiB
C++

/*
ZMutex.hpp
Author: James Russell <jcrussell@762studios.com>
Purpose: RAII Wrapper for libsst-concurrency SST_Mutex objects.
Changelog
2011/11/27 - creation (jcrussell)
*/
#pragma once
#ifndef _ZMUTEX_H
#define _ZMUTEX_H
#include <ZUtil/ZUtilBuild.hpp>
#include <SST/SST_Mutex.h>
/*
ZMutex class. Used to allocate and deallocate a mutex within the scope of a class.
Cannot be copied or assigned, which prevents it from being used in stl-like containers.
*/
class ZMutex
{
private:
DISABLE_COPY_AND_ASSIGN(ZMutex);
//libsst Mutex
SST_Mutex Mutex;
public:
/*
Constructor. Creates a mutex from libsst-concurrency.
*/
ZMutex();
/*
Destructor. Frees our mutex from libsst-concurrency.
*/
~ZMutex();
/*
public ZLock::Acquire
Acquires this lock, which locks the contained mutex.
@return (void)
@context (all)
*/
void Acquire();
/*
public ZLock::Release
Releases this lock, which unlocks the contained mutex.
@return (void)
@context (all)
*/
void Release();
};
/*
Scoped lock. Acquires the provided lock so long as it remains in scope. Releases the lock when
it goes out of scope.
*/
class ZLock
{
private:
DISABLE_COPY_AND_ASSIGN(ZLock);
//The Mutex
ZMutex& Mutex;
public:
/*
Constructor. Acquires the mutex during construction.
@param _mutex - the mutex we are to acquire
*/
ZLock(ZMutex& _lock);
/*
Destructor. Releases the mutex when the object is destructed (goes out of scope).
*/
~ZLock();
};
#endif