let update_broadcast mtx cnd ~f = critical_section mtx ~f:(fun () -> let res = f () in Condition.broadcast cnd; res)