concurrent algorithm design