diff --git a/ipaacalib/cpp/include/ipaaca/ipaaca.h b/ipaacalib/cpp/include/ipaaca/ipaaca.h index 16f2fb500a0c5f7c390307816c77cb776f56e3d0..39db64da75edd3d926badfb83224489b28d866cd 100644 --- a/ipaacalib/cpp/include/ipaaca/ipaaca.h +++ b/ipaacalib/cpp/include/ipaaca/ipaaca.h @@ -150,6 +150,20 @@ class Lock } }; +/// Stack-based lock holder. Create in a new stack frame +/// (i.e. {}-block) and it will obtain the lock and +/// auto-release in on exiting the stack frame. +class Locker +{ + protected: + Lock* _lock; + private: + inline Locker(): _lock(NULL) { } // not available + public: + inline Locker(Lock& lock): _lock(&lock) { _lock->lock(); } + inline ~Locker() { _lock->unlock(); } +}; + typedef std::set<std::string> LinkSet; typedef std::map<std::string, LinkSet> LinkMap; class SmartLinkMap {