Being independent and having no synchronisation are two entirely different scenarios when dealing with MPI, thanks to non-blocking communication.
It seems to me that what you want can be implemented this way: when an error occurs, a process broadcasts a message with a designated "error" tag, and each process periodically posts non-blocking receives for a message with this tag. If they receive such a message, it means that an error occured recently and they can react accordingly, otherwise they continue their normal execution.
(Note that "broadcasting" in this case doesn't refer to MPI_Bcast
, since that's a collective communication operation, and as such blocks. Instead, it simply means sending the same message to everyone it may concern. If you want to maintain no synchronisation between the processes, then this sending will have to be non-blocking as well.)