From 1ae460bc10b16ab65bbd9d3a49ce6bf29fc5168e Mon Sep 17 00:00:00 2001 From: Ramin Yaghoubzadeh <ryaghoub@techfak.uni-bielefeld.de> Date: Tue, 18 Sep 2012 01:34:40 +0200 Subject: [PATCH] Added Locker class (stack-based auto-releasing mutex holder). --- ipaacalib/cpp/include/ipaaca/ipaaca.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/ipaacalib/cpp/include/ipaaca/ipaaca.h b/ipaacalib/cpp/include/ipaaca/ipaaca.h index 16f2fb5..39db64d 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 { -- GitLab