Deterministic multithreading is hard (2024)