⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 switrdmonitor.hpp

📁 OSB-PIK-OpenVXI-3.0.0源代码 “中国XML论坛 - 专业的XML技术讨论区--XML在语音技术中的应用”
💻 HPP
字号:
#ifndef SWITRDMONITOR_HPP #define SWITRDMONITOR_HPP  /****************License************************************************  *  * Copyright 2000-2003.  ScanSoft, Inc.      *  * Use of this software is subject to notices and obligations set forth   * in the SpeechWorks Public License - Software Version 1.2 which is   * included with this software.   *  * ScanSoft is a registered trademark of ScanSoft, Inc., and OpenSpeech,   * SpeechWorks and the SpeechWorks logo are registered trademarks or   * trademarks of SpeechWorks International, Inc. in the United States   * and other countries.  *  ***********************************************************************/  #include "SWIutilHeaderPrefix.h"  #include "VXItypes.h"  /**  * Class encapsulating thread monitor.  Thread monitors can be locked,  * unlocked, can be waited on and can be notified.  Monitors implement  * so-called recursive locking, meaning that a thread owning the monitor can  * call lock without blocking and will have to call unlock() as many time  * lock() was called.  *  * @doc <p>  **/  class SWIUTIL_API_CLASS SWItrdMonitor {  public:   enum Policy   {     /*      * Indicates that mutex used by SWItrdMonitor is taken from a pool so that      * different SWItrdMonitor can reuse the same OS mutex.      */     POOLED = 0,      /*      * Indicates that mutex used by SWItrdMonitor are dedicated to that      * SWItrdMonitor and cannot be reused.      */     DEDICATED = 1   };    /**    * Status indicating success of an operation.    **/  public:   static const int SUCCESS;    /**    * Status indicating failure of an operation.    **/  public:   static const int FAILURE;    /**    * Status indicating failure of an operation because the current thread does    * not own the monitor.    **/   static const int NOT_OWNER;    // ................. CONSTRUCTORS, DESTRUCTOR  ............   //   // ------------------------------------------------------------   /**    * Default constructor.    **/  public:   SWItrdMonitor(Policy policy = POOLED);    /**    * Destructor.    **/  public:   virtual ~SWItrdMonitor();    /**    * Locks the monitor.    **/  public:   int lock();    /**    * Unlocks the monitor.    **/  public:   int unlock();    /**    * Causes current thread to wait until another thread invokes the    * <code>notify()</code> method or the    * <code>notifyAll()</code> method for this monitor.    * <p>    * The current thread must own this monitor. The thread    * releases ownership of this monitor and waits until another thread    * notifies threads waiting on this object's monitor to wake up    * either through a call to the <code>notify</code> method or the    * <code>notifyAll</code> method. The thread then waits until it can    * re-obtain ownership of the monitor and resumes execution.    * <p>    **/  public:   int wait();    /**    * Causes current thread to wait until either another thread invokes the    * <code>notify()</code> method or the    * <code>notifyAll()</code> method for this monitor, or a    * specified amount of time has elapsed.    **/  public:   int wait(unsigned long millisecs, bool *expiredF = 0);    /**    * Wakes up a single thread that is waiting on this    * monitor. If more than one thread are waiting on this object, one of them    * is arbitrarily chosen to be awakened. A thread waits on the    * monitor by calling one of the <code>wait</code> methods.    *    * <p>    * The awakened thread will not be able to proceed until the current    * thread relinquishes the lock on this object. The awakened thread will    * compete in the usual manner with any other threads that might be    * actively competing to synchronize on this object; for example, the    * awakened thread enjoys no reliable privilege or disadvantage in being    * the next thread to lock this monitor.    *    * <p>    * This method should only be called by a thread that is the owner    * of this monitor.    **/  public:   int notify();    /**    * Wakes up all threads that are waiting on this monitor. A    * thread waits on a monitor by calling one of the    * <code>wait</code> methods.    *    * <p>    * The awakened threads will not be able to proceed until the current    * thread relinquishes the monitor. The awakened threads    * will compete in the usual manner with any other threads that might    * be actively competing to synchronize on this monitor; for example,    * the awakened threads enjoy no reliable privilege or disadvantage in    * being the next thread to lock this object.    * <p>    * This method should only be called by a thread that is the owner    * of this object's monitor.    **/    public:   int notifyAll();    /**     * Diabled copy constructor.    **/  private:   SWItrdMonitor(const SWItrdMonitor&);    /**     * Disabled assignment operator.    **/  private:   SWItrdMonitor& operator=(const SWItrdMonitor&);   private:   struct HandleListItem   {     void* _handle;     HandleListItem * volatile _next;     HandleListItem * volatile _prev;     int _count;   };    volatile VXIthreadID _ownerThread;   volatile int _lockCount;    // List of free events that can be used for wait/notifcation purpose.   static HandleListItem * volatile _freeThreadList;    // Mutex used to handle modification to the freeLists.   static void * _globalLock;    HandleListItem * volatile _firstWaitingThread;   HandleListItem * volatile _lastWaitingThread;    HandleListItem *getHandle();   void resetHandle(HandleListItem *);   int notifyAllHandles();   static HandleListItem * volatile _freeMutexList;   HandleListItem* _mutex;   Policy _policy; };  #endif

⌨️ 快捷键说明

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