interprocess_semaphore.hpp
来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 120 行
HPP
120 行
////////////////////////////////////////////////////////////////////////////////// (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_SEMAPHORE_HPP#define BOOST_INTERPROCESS_SEMAPHORE_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/detail/posix_time_types_wrk.hpp>#if !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && \ (defined(BOOST_INTERPROCESS_POSIX_PROCESS_SHARED) && defined(BOOST_INTERPROCESS_POSIX_SEMAPHORES)) #include <fcntl.h> //O_CREAT, O_*... #include <unistd.h> //close #include <string> //std::string #include <semaphore.h> //sem_* family, SEM_VALUE_MAX #include <sys/stat.h> //mode_t, S_IRWXG, S_IRWXO, S_IRWXU, #include <boost/interprocess/sync/posix/semaphore_wrapper.hpp> #define BOOST_INTERPROCESS_USE_POSIX#else #include <boost/interprocess/detail/atomic.hpp> #include <boost/cstdint.hpp> #include <boost/interprocess/detail/os_thread_functions.hpp> #include <boost/interprocess/sync/interprocess_mutex.hpp> #include <boost/interprocess/sync/interprocess_condition.hpp> #define BOOST_INTERPROCESS_USE_GENERIC_EMULATION#endif//!\file//!Describes a interprocess_semaphore class for inter-process synchronizationnamespace boost {namespace interprocess {//!Wraps a interprocess_semaphore that can be placed in shared memory and can be //!shared between processes. Allows timed lock triesclass interprocess_semaphore{ /// @cond //Non-copyable interprocess_semaphore(const interprocess_semaphore &); interprocess_semaphore &operator=(const interprocess_semaphore &); /// @endcond public: //!Creates a interprocess_semaphore with the given initial count. //!interprocess_exception if there is an error.*/ interprocess_semaphore(int initialCount); //!Destroys the interprocess_semaphore. //!Does not throw ~interprocess_semaphore(); //!Increments the interprocess_semaphore count. If there are processes/threads blocked waiting //!for the interprocess_semaphore, then one of these processes will return successfully from //!its wait function. If there is an error an interprocess_exception exception is thrown. void post(); //!Decrements the interprocess_semaphore. If the interprocess_semaphore value is not greater than zero, //!then the calling process/thread blocks until it can decrement the counter. //!If there is an error an interprocess_exception exception is thrown. void wait(); //!Decrements the interprocess_semaphore if the interprocess_semaphore's value is greater than zero //!and returns true. If the value is not greater than zero returns false. //!If there is an error an interprocess_exception exception is thrown. bool try_wait(); //!Decrements the interprocess_semaphore if the interprocess_semaphore's value is greater //!than zero and returns true. Otherwise, waits for the interprocess_semaphore //!to the posted or the timeout expires. If the timeout expires, the //!function returns false. If the interprocess_semaphore is posted the function //!returns true. If there is an error throws sem_exception bool timed_wait(const boost::posix_time::ptime &abs_time); //!Returns the interprocess_semaphore count// int get_count() const; /// @cond private: #if defined(BOOST_INTERPROCESS_USE_GENERIC_EMULATION) interprocess_mutex m_mut; interprocess_condition m_cond; int m_count; #else detail::semaphore_wrapper m_sem; #endif //#if defined(BOOST_INTERPROCESS_USE_GENERIC_EMULATION) /// @endcond};} //namespace interprocess {} //namespace boost {#ifdef BOOST_INTERPROCESS_USE_GENERIC_EMULATION# undef BOOST_INTERPROCESS_USE_GENERIC_EMULATION# include <boost/interprocess/sync/emulation/interprocess_semaphore.hpp>#endif#ifdef BOOST_INTERPROCESS_USE_POSIX# undef BOOST_INTERPROCESS_USE_POSIX# include <boost/interprocess/sync/posix/interprocess_semaphore.hpp>#endif#include <boost/interprocess/detail/config_end.hpp>#endif //BOOST_INTERPROCESS_SEMAPHORE_HPP
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?