Gate <-> CriticalSection Gate <-> Event Event -> Gate Mutex -> Mutex Create common base for Mutex and Gate so that passOneOf() passAllOf() can work with mixed mutex / gate combinations ThreadPool problem: Invoked function/method/functor has to be able to check the Thread's terminationRequested() property in order to make a clean shutdown possible