メインページ | クラス階層 | アルファベット順一覧 | 構成 | Directories | ファイル一覧 | 構成メンバ

ysemaphore.h

説明を見る。
00001 
00011 #ifndef DEFINE_H_YSEMAPHORE
00012 #define DEFINE_H_YSEMAPHORE
00013 
00014 #include <basic.h>
00015 #include <btron/taskcomm.h>
00016 #include "yexception.h"
00017 
00022 class YSemaphoreException : public YException {
00023 public:
00024   YSemaphoreException(W n = 0) : YException(n) {}
00025   YSemaphoreException(const YString& str, W n = 0)
00026     : YException(str, n) {}
00027 };
00028 
00029 struct YSemaphoreInstance {
00030   W sem_id;
00031   W refcount;
00032 };
00033 
00046 class YSemaphore {
00047 private:
00048   mutable YSemaphoreInstance *sem;
00049   W max_count;
00050   W mode;
00051 
00053   W getInternalSemaphoreID() const;
00054 
00056   YSemaphoreInstance* getInstance() const;
00057 
00059   void reductInstanceReferrer();
00060 
00061 protected:
00062 
00063 public:
00065   YSemaphore(W cnt = 1, W mode = SEM_EXCL);
00066   
00071   ~YSemaphore() {
00072     W global_sem = getInternalSemaphoreID();
00073     wai_sem(global_sem, T_FOREVER);
00074     // クリティカルセクション開始
00075     try {
00076       reductInstanceReferrer();
00077     }
00078     catch (...){
00079       sig_sem(global_sem);
00080       throw;
00081     }
00082     // クリティカルセクション終了
00083     sig_sem(global_sem);
00084   }
00085 
00086   // コピーコンストラクタ
00087   YSemaphore(const YSemaphore& src);
00088 
00090   void lock();
00091 
00093   void unlock();
00094 
00096   const YSemaphore& operator=(const YSemaphore& src);
00097   
00098 };
00099 
00100 #endif // DEFINE_H_YSEMAPHORE

YLibに対してMon Mar 21 08:57:44 2005に生成されました。  doxygen 1.4.1