/*
|
* =====================================================================================
|
*
|
* 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();
|
}
|
}
|
|
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
|