A provably correct, non-deadlocking parallel event simulation algorithm