We use non-recursive locks too. The pattern is: --- bool wasMyLock=obj.isMyLock(); if(!wasMyLock)obj.lock(); ...code... if(!wasMyLock)obj.unlock(); ---