Using discrete semaphore for synchronization + improved semantics...