Program Listing for File lockable.hpp
↰ Return to documentation for file (rcppsw/multithread/lockable.hpp
)
#pragma once
/*******************************************************************************
* Includes
******************************************************************************/
#include <shared_mutex>
#include "rcppsw/rcppsw.hpp"
/*******************************************************************************
* Namespaces/Decls
******************************************************************************/
namespace rcppsw::multithread {
/*******************************************************************************
* Class Definitions
******************************************************************************/
class lockable {
public:
lockable(void) = default;
virtual ~lockable(void) = default;
/* Not move/copy constructable/assignable by default */
lockable(const lockable&) = delete;
const lockable& operator=(const lockable&) = delete;
lockable(lockable&&) = delete;
lockable& operator=(lockable&&) = delete;
void maybe_lock_wr(std::shared_mutex* mtx, bool cond) {
if (cond) {
mtx->lock();
}
}
void maybe_unlock_wr(std::shared_mutex* mtx, bool cond) {
if (cond) {
mtx->unlock();
}
}
void maybe_lock_rd(std::shared_mutex* mtx, bool cond) const {
if (cond) {
mtx->lock_shared();
}
}
void maybe_unlock_rd(std::shared_mutex* mtx, bool cond) const {
if (cond) {
mtx->unlock_shared();
}
}
void lock_wr(std::shared_mutex* mtx) { maybe_lock_wr(mtx, true); }
void unlock_wr(std::shared_mutex* mtx) { maybe_unlock_wr(mtx, true); }
void lock_rd(std::shared_mutex* mtx) const { maybe_lock_rd(mtx, true); }
void unlock_rd(std::shared_mutex* mtx) const { maybe_unlock_rd(mtx, true); }
};
} /* namespace rcppsw::multithread */