//: C11:TemporaryUnlocking.cpp
// Z knihy "Myslíme v jazyce C++, část 2" od Bruce Eckela a Chucka Allisona.
// (c) 1995-2004 MindView, Inc. Všechna práva vyhrazena.
// Přečtěte si podmínky používání zdrojových kódů umístěné v souboru 
// 'Licence.txt' dodávaném spolu s balíčkem kódu dostupným na www.MindView.net.
// Dočasné odemčení jiného strážce.
//{L} ZThread
#include "zthread/Thread.h"
#include "zthread/Mutex.h"
#include "zthread/Guard.h"
using namespace ZThread;

class TemporaryUnlocking {
  Mutex lock;
public:
  void f() {
    Guard<Mutex> g(lock);
    // zámek je uzamčen
    // ...
    {
      Guard<Mutex, UnlockedScope> h(g);
      // zámek je uvolněn
      // ...
      // zámek je uzamčen
    }
    // ...
    // zámek je uvolněn
  }
};

int main() {
  TemporaryUnlocking t;
  t.f();
} ///:~
