named_upgradable_mutex.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 370 行 · 第 1/2 页

HPP
370
字号
   //!Effects: The thread atomically releases upgradable ownership and acquires   //!   exclusive ownership. This operation will block until all threads with   //!   sharable ownership release it.    //!Throws: An exception derived from interprocess_exception on error.   void unlock_upgradable_and_lock();   //!Precondition: The thread must have upgradable ownership of the mutex.    //!Effects: The thread atomically releases upgradable ownership and tries to   //!   acquire exclusive ownership. This operation will fail if there are threads   //!   with sharable ownership, but it will maintain upgradable ownership.    //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false.   //!Throws: An exception derived from interprocess_exception on error.   bool try_unlock_upgradable_and_lock();   //!Precondition: The thread must have upgradable ownership of the mutex.    //!Effects: The thread atomically releases upgradable ownership and tries to acquire   //!   exclusive ownership, waiting if necessary until abs_time. This operation will   //!   fail if there are threads with sharable ownership or timeout reaches, but it   //!   will maintain upgradable ownership.    //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false.    //!Throws: An exception derived from interprocess_exception on error.   bool timed_unlock_upgradable_and_lock(const boost::posix_time::ptime &abs_time);   //!Precondition: The thread must have sharable ownership of the mutex.    //!Effects: The thread atomically releases sharable ownership and tries to acquire   //!   exclusive ownership. This operation will fail if there are threads with sharable   //!   or upgradable ownership, but it will maintain sharable ownership.   //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false.    //!Throws: An exception derived from interprocess_exception on error.   bool try_unlock_sharable_and_lock();   bool try_unlock_sharable_and_lock_upgradable();   //!Erases a named upgradable mutex from the system.   //!Returns false on error. Never throws.   static bool remove(const char *name);   /// @cond   private:   friend class detail::interprocess_tester;   void dont_close_on_destruction();   interprocess_upgradable_mutex *mutex() const   {  return static_cast<interprocess_upgradable_mutex*>(m_shmem.get_user_address()); }   detail::managed_open_or_create_impl<shared_memory_object> m_shmem;   typedef detail::named_creation_functor<interprocess_upgradable_mutex> construct_func_t;   /// @endcond};/// @condinline named_upgradable_mutex::~named_upgradable_mutex(){}inline named_upgradable_mutex::named_upgradable_mutex   (create_only_t, const char *name)   :  m_shmem  (create_only               ,name               ,sizeof(interprocess_upgradable_mutex) +                  detail::managed_open_or_create_impl<shared_memory_object>::                     ManagedOpenOrCreateUserOffset               ,read_write               ,0               ,construct_func_t(detail::DoCreate)){}inline named_upgradable_mutex::named_upgradable_mutex   (open_or_create_t, const char *name)   :  m_shmem  (open_or_create               ,name               ,sizeof(interprocess_upgradable_mutex) +                  detail::managed_open_or_create_impl<shared_memory_object>::                     ManagedOpenOrCreateUserOffset               ,read_write               ,0               ,construct_func_t(detail::DoOpenOrCreate)){}inline named_upgradable_mutex::named_upgradable_mutex   (open_only_t, const char *name)   :  m_shmem  (open_only               ,name               ,read_write               ,0               ,construct_func_t(detail::DoOpen)){}inline void named_upgradable_mutex::dont_close_on_destruction(){  detail::interprocess_tester::dont_close_on_destruction(m_shmem);  }inline void named_upgradable_mutex::lock(){  this->mutex()->lock();  }inline void named_upgradable_mutex::unlock(){  this->mutex()->unlock();  }inline bool named_upgradable_mutex::try_lock(){  return this->mutex()->try_lock();  }inline bool named_upgradable_mutex::timed_lock   (const boost::posix_time::ptime &abs_time){   if(abs_time == boost::posix_time::pos_infin){      this->lock();      return true;   }   return this->mutex()->timed_lock(abs_time);}inline void named_upgradable_mutex::lock_upgradable(){  this->mutex()->lock_upgradable();  }inline void named_upgradable_mutex::unlock_upgradable(){  this->mutex()->unlock_upgradable();  }inline bool named_upgradable_mutex::try_lock_upgradable(){  return this->mutex()->try_lock_upgradable();  }inline bool named_upgradable_mutex::timed_lock_upgradable   (const boost::posix_time::ptime &abs_time){   if(abs_time == boost::posix_time::pos_infin){      this->lock_upgradable();      return true;   }   return this->mutex()->timed_lock_upgradable(abs_time);}inline void named_upgradable_mutex::lock_sharable(){  this->mutex()->lock_sharable();  }inline void named_upgradable_mutex::unlock_sharable(){  this->mutex()->unlock_sharable();  }inline bool named_upgradable_mutex::try_lock_sharable(){  return this->mutex()->try_lock_sharable();  }inline bool named_upgradable_mutex::timed_lock_sharable   (const boost::posix_time::ptime &abs_time){   if(abs_time == boost::posix_time::pos_infin){      this->lock_sharable();      return true;   }   return this->mutex()->timed_lock_sharable(abs_time);}inline void named_upgradable_mutex::unlock_and_lock_upgradable(){  this->mutex()->unlock_and_lock_upgradable();  }inline void named_upgradable_mutex::unlock_and_lock_sharable(){  this->mutex()->unlock_and_lock_sharable();  }inline void named_upgradable_mutex::unlock_upgradable_and_lock_sharable(){  this->mutex()->unlock_upgradable_and_lock_sharable();  }inline void named_upgradable_mutex::unlock_upgradable_and_lock(){  this->mutex()->unlock_upgradable_and_lock();  }inline bool named_upgradable_mutex::try_unlock_upgradable_and_lock(){  return this->mutex()->try_unlock_upgradable_and_lock();  }inline bool named_upgradable_mutex::timed_unlock_upgradable_and_lock   (const boost::posix_time::ptime &abs_time){  return this->mutex()->timed_unlock_upgradable_and_lock(abs_time);  }inline bool named_upgradable_mutex::try_unlock_sharable_and_lock(){  return this->mutex()->try_unlock_sharable_and_lock();  }inline bool named_upgradable_mutex::try_unlock_sharable_and_lock_upgradable(){  return this->mutex()->try_unlock_sharable_and_lock_upgradable();  }inline bool named_upgradable_mutex::remove(const char *name){  return shared_memory_object::remove(name); }/// @endcond}  //namespace interprocess {}  //namespace boost {#include <boost/interprocess/detail/config_end.hpp>#endif   //BOOST_INTERPROCESS_named_upgradable_mutex_HPP

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?