class __attribute__((lockable)) Lock { public: void Acquire() __attribute__((exclusive_lock_function())) {} void Release() __attribute__((unlock_function())) {} }; class __attribute__((scoped_lockable)) AutoLock { public: AutoLock(Lock &lock) __attribute__((exclusive_lock_function(lock))) : lock_(lock) { lock.Acquire(); } ~AutoLock() __attribute__((unlock_function())) { lock_.Release(); } private: Lock &lock_; };