/* * ===================================================================================== * * Filename: shm.cpp * * Description: * * Version: 1.0 * Created: 2021年03月22日 16时19分36秒 * Revision: none * Compiler: gcc * * Author: Li Chao (), * Organization: * * ===================================================================================== */ #include "shm.h" namespace bhome_shm { bool MutexWithTimeLimit::try_lock() { if (mutex_.try_lock()) { auto old_time = last_lock_time_.load(); if (Now() - old_time > limit_) { return last_lock_time_.compare_exchange_strong(old_time, Now()); } else { last_lock_time_.store(Now()); return true; } } else { auto old_time = last_lock_time_.load(); if (Now() - old_time > limit_) { return last_lock_time_.compare_exchange_strong(old_time, Now()); } else { return false; } } } void MutexWithTimeLimit::lock() { while (!try_lock()) { std::this_thread::yield(); } } void MutexWithTimeLimit::unlock() { auto old_time = last_lock_time_.load(); if (Now() - old_time > limit_) { } else { if (last_lock_time_.compare_exchange_strong(old_time, Now())) { mutex_.unlock(); } } } SharedMemory::SharedMemory(const std::string &name, const uint64_t size) : mshm_t(open_or_create, name.c_str(), size, 0, AllowAll()), name_(name) { } SharedMemory::~SharedMemory() { } } // namespace bhome_shm