Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TLockPath.h
Go to the documentation of this file.
1 // @(#)root/proof:$Id$
2 // Author: G. Ganis, Oct 2015
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2005, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #ifndef ROOT_TLockPath
13 #define ROOT_TLockPath
14 
15 //////////////////////////////////////////////////////////////////////////
16 // //
17 // TLockPath //
18 // //
19 // Path locking class allowing shared and exclusive locks //
20 // //
21 //////////////////////////////////////////////////////////////////////////
22 
23 #include "TObject.h"
24 #include "TString.h"
25 
26 class TLockPath : public TObject {
27 private:
28  TString fName; // path to lock
29  Int_t fLockId; // file id of dir lock
30 
31 public:
32  TLockPath(const char *path = "");
33  ~TLockPath() { if (IsLocked()) Unlock(); }
34 
35  const char *GetName() const { return fName; }
36  void SetName(const char *path) { fName = path; }
37 
38  Int_t Lock(Bool_t shared = kFALSE);
39  Int_t Unlock();
40 
41  Bool_t IsLocked() const { return (fLockId > -1); }
42 
43  ClassDef(TLockPath, 0) // Path locking class
44 };
45 
46 class TLockPathGuard {
47 private:
48  TLockPath *fLocker; //locker instance
49 
50 public:
51  TLockPathGuard(TLockPath *l, Bool_t shared = kFALSE) {
52  fLocker = l; fLocker->Lock(shared); }
53  ~TLockPathGuard() { fLocker->Unlock(); }
54 };
55 
56 #endif