// @(#)root/thread:$Id$
// Author: Fons Rademakers   02/07/97

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TSemaphore
#define ROOT_TSemaphore


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TSemaphore                                                           //
//                                                                      //
// This class implements a counting semaphore. Use a semaphore          //
// to synchronize threads.                                              //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TObject
#include "TObject.h"
#endif
#ifndef ROOT_TMutex
#include "TMutex.h"
#endif
#ifndef ROOT_TCondition
#include "TCondition.h"
#endif


class TSemaphore : public TObject {

private:
   TMutex       fMutex;   // semaphare mutex
   TCondition   fCond;    // semaphore condition variable
   Int_t        fValue;   // counter

   TSemaphore(const TSemaphore &s);             // not implemented
   TSemaphore& operator=(const TSemaphore &s);  // not implemented

public:
   TSemaphore(UInt_t initial = 1);
   virtual ~TSemaphore() { }

   Int_t  Wait(Int_t millisec = 0);
   Int_t  TryWait();
   Int_t  Post();

   ClassDef(TSemaphore,0)  // Counting semaphore class
};

#endif
 TSemaphore.h:1
 TSemaphore.h:2
 TSemaphore.h:3
 TSemaphore.h:4
 TSemaphore.h:5
 TSemaphore.h:6
 TSemaphore.h:7
 TSemaphore.h:8
 TSemaphore.h:9
 TSemaphore.h:10
 TSemaphore.h:11
 TSemaphore.h:12
 TSemaphore.h:13
 TSemaphore.h:14
 TSemaphore.h:15
 TSemaphore.h:16
 TSemaphore.h:17
 TSemaphore.h:18
 TSemaphore.h:19
 TSemaphore.h:20
 TSemaphore.h:21
 TSemaphore.h:22
 TSemaphore.h:23
 TSemaphore.h:24
 TSemaphore.h:25
 TSemaphore.h:26
 TSemaphore.h:27
 TSemaphore.h:28
 TSemaphore.h:29
 TSemaphore.h:30
 TSemaphore.h:31
 TSemaphore.h:32
 TSemaphore.h:33
 TSemaphore.h:34
 TSemaphore.h:35
 TSemaphore.h:36
 TSemaphore.h:37
 TSemaphore.h:38
 TSemaphore.h:39
 TSemaphore.h:40
 TSemaphore.h:41
 TSemaphore.h:42
 TSemaphore.h:43
 TSemaphore.h:44
 TSemaphore.h:45
 TSemaphore.h:46
 TSemaphore.h:47
 TSemaphore.h:48
 TSemaphore.h:49
 TSemaphore.h:50
 TSemaphore.h:51
 TSemaphore.h:52
 TSemaphore.h:53
 TSemaphore.h:54
 TSemaphore.h:55
 TSemaphore.h:56
 TSemaphore.h:57