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 + -
显示快捷键?