implement ThreadMutex
implement Guard
implement ThreadCondition and rethink threading