lichao
2021-05-13 db322f33ba13592f2492317e3f1a070454c97059
src/robust.cpp
@@ -35,24 +35,30 @@
bool FMutex::try_lock()
{
   if (mtx_.try_lock()) {
      if (flock(fd_, LOCK_EX | LOCK_NB) == 0) {
   if (flock(fd_, LOCK_EX | LOCK_NB) == 0) {
      ++count_;
      if (mtx_.try_lock()) {
         return true;
      } else {
         mtx_.unlock();
         if (--count_ == 0) {
            flock(fd_, LOCK_UN);
         }
      }
   }
   return false;
}
void FMutex::lock()
{
   mtx_.lock();
   flock(fd_, LOCK_EX);
   ++count_;
   mtx_.lock();
}
void FMutex::unlock()
{
   flock(fd_, LOCK_UN);
   mtx_.unlock();
   if (--count_ == 0) {
      flock(fd_, LOCK_UN);
   }
}
} // namespace robust