liuxiaolong
2021-07-20 58d904a328c0d849769b483e901a0be9426b8209
src/shm.cpp
@@ -21,46 +21,11 @@
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)
{
   pmutex_ = FindOrCreate<Mutex>("ShmSelfControlMutex0");
}
SharedMemory::~SharedMemory()