named_upgradable_mutex.hpp

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

HPP
370
字号
////////////////////////////////////////////////////////////////////////////////// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost// Software License, Version 1.0. (See accompanying file// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)//// See http://www.boost.org/libs/interprocess for documentation.////////////////////////////////////////////////////////////////////////////////#ifndef BOOST_INTERPROCESS_named_upgradable_mutex_HPP#define BOOST_INTERPROCESS_named_upgradable_mutex_HPP#if (defined _MSC_VER) && (_MSC_VER >= 1200)#  pragma once#endif#include <boost/interprocess/detail/config_begin.hpp>#include <boost/interprocess/detail/workaround.hpp>#include <boost/interprocess/creation_tags.hpp>#include <boost/interprocess/exceptions.hpp>#include <boost/interprocess/shared_memory_object.hpp>#include <boost/interprocess/detail/managed_open_or_create_impl.hpp>#include <boost/interprocess/sync/interprocess_upgradable_mutex.hpp>#include <boost/interprocess/detail/posix_time_types_wrk.hpp>#include <boost/interprocess/sync/emulation/named_creation_functor.hpp>//!\file//!Describes a named upgradable mutex class for inter-process synchronizationnamespace boost {namespace interprocess {/// @condnamespace detail{ class interprocess_tester; }/// @endcondclass named_condition;//!A upgradable mutex with a global name, so it can be found from different //!processes. This mutex can't be placed in shared memory, and//!each process should have it's own named upgradable mutex.class named_upgradable_mutex{   /// @cond   //Non-copyable   named_upgradable_mutex();   named_upgradable_mutex(const named_upgradable_mutex &);   named_upgradable_mutex &operator=(const named_upgradable_mutex &);   friend class named_condition;   /// @endcond   public:   //!Creates a global upgradable mutex with a name.    //!If the upgradable mutex can't be created throws interprocess_exception   named_upgradable_mutex(create_only_t create_only, const char *name);   //!Opens or creates a global upgradable mutex with a name, and an initial count.    //!If the upgradable mutex is created, this call is equivalent to   //!named_upgradable_mutex(create_only_t, ...)   //!If the upgradable mutex is already created, this call is equivalent to   //!named_upgradable_mutex(open_only_t, ... ).   named_upgradable_mutex(open_or_create_t open_or_create, const char *name);   //!Opens a global upgradable mutex with a name if that upgradable mutex   //!is previously.   //!created. If it is not previously created this function throws   //!interprocess_exception.   named_upgradable_mutex(open_only_t open_only, const char *name);   //!Destroys *this and indicates that the calling process is finished using   //!the resource. The destructor function will deallocate   //!any system resources allocated by the system for use by this process for   //!this resource. The resource can still be opened again calling   //!the open constructor overload. To erase the resource from the system   //!use remove().   ~named_upgradable_mutex();   //Exclusive locking   //!Effects: The calling thread tries to obtain exclusive ownership of the mutex,   //!   and if another thread has exclusive, sharable or upgradable ownership of   //!   the mutex, it waits until it can obtain the ownership.   //!Throws: interprocess_exception on error.   void lock();   //!Effects: The calling thread tries to acquire exclusive ownership of the mutex   //!   without waiting. If no other thread has exclusive, sharable or upgradable   //!   ownership of the mutex this succeeds.   //!Returns: If it can acquire exclusive ownership immediately returns true.   //!   If it has to wait, returns false.   //!Throws: interprocess_exception on error.   bool try_lock();   //!Effects: The calling thread tries to acquire exclusive ownership of the mutex   //!   waiting if necessary until no other thread has has exclusive, sharable or   //!   upgradable ownership of the mutex or abs_time is reached.    //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false.    //!Throws: interprocess_exception on error.   bool timed_lock(const boost::posix_time::ptime &abs_time);   //!Precondition: The thread must have exclusive ownership of the mutex.    //!Effects: The calling thread releases the exclusive ownership of the mutex.    //!Throws: An exception derived from interprocess_exception on error.   void unlock();   //Sharable locking   //!Effects: The calling thread tries to obtain sharable ownership of the mutex,   //!   and if another thread has exclusive or upgradable ownership of the mutex,   //!   waits until it can obtain the ownership.   //!Throws: interprocess_exception on error.   void lock_sharable();   //!Effects: The calling thread tries to acquire sharable ownership of the mutex   //!   without waiting. If no other thread has has exclusive or upgradable ownership   //!   of the mutex this succeeds.    //!Returns: If it can acquire sharable ownership immediately returns true. If it   //!   has to wait, returns false.    //!Throws: interprocess_exception on error.   bool try_lock_sharable();   //!Effects: The calling thread tries to acquire sharable ownership of the mutex   //!   waiting if necessary until no other thread has has exclusive or upgradable   //!   ownership of the mutex or abs_time is reached.    //!Returns: If acquires sharable ownership, returns true. Otherwise returns false.    //!Throws: interprocess_exception on error.   bool timed_lock_sharable(const boost::posix_time::ptime &abs_time);   //!Precondition: The thread must have sharable ownership of the mutex.    //!Effects: The calling thread releases the sharable ownership of the mutex.    //!Throws: An exception derived from interprocess_exception on error.   void unlock_sharable();   //Upgradable locking   //!Effects: The calling thread tries to obtain upgradable ownership of the mutex,   //!   and if another thread has exclusive or upgradable ownership of the mutex,   //!   waits until it can obtain the ownership.   //!Throws: interprocess_exception on error.   void lock_upgradable();   //!Effects: The calling thread tries to acquire upgradable ownership of the mutex   //!   without waiting. If no other thread has has exclusive or upgradable ownership   //!   of the mutex this succeeds.    //!Returns: If it can acquire upgradable ownership immediately returns true.   //!   If it has to wait, returns false.   //!Throws: interprocess_exception on error.   bool try_lock_upgradable();   //!Effects: The calling thread tries to acquire upgradable ownership of the mutex   //!   waiting if necessary until no other thread has has exclusive or upgradable   //!   ownership of the mutex or abs_time is reached.   //!Returns: If acquires upgradable ownership, returns true. Otherwise returns false.    //!Throws: interprocess_exception on error.   bool timed_lock_upgradable(const boost::posix_time::ptime &abs_time);   //!Precondition: The thread must have upgradable ownership of the mutex.    //!Effects: The calling thread releases the upgradable ownership of the mutex.    //!Throws: An exception derived from interprocess_exception on error.   void unlock_upgradable();   //Demotions   //!Precondition: The thread must have exclusive ownership of the mutex.    //!Effects: The thread atomically releases exclusive ownership and acquires   //!   upgradable ownership. This operation is non-blocking.    //!Throws: An exception derived from interprocess_exception on error.   void unlock_and_lock_upgradable();   //!Precondition: The thread must have exclusive ownership of the mutex.    //!Effects: The thread atomically releases exclusive ownership and acquires   //!   sharable ownership. This operation is non-blocking.    //!Throws: An exception derived from interprocess_exception on error.   void unlock_and_lock_sharable();   //!Precondition: The thread must have upgradable ownership of the mutex.    //!Effects: The thread atomically releases upgradable ownership and acquires   //!   sharable ownership. This operation is non-blocking.    //!Throws: An exception derived from interprocess_exception on error.   void unlock_upgradable_and_lock_sharable();   //Promotions   //!Precondition: The thread must have upgradable ownership of the mutex. 

⌨️ 快捷键说明

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