Such deadlocks can be avoided. For instance, indefinite blocking is often avoided
by interrupt-based channel creation. Tilera’s iLib communication library uses channel
creation through protocol messages. It sends a single flit message to a destination
and awaits an acknowledgment. If the request is not acknowledged, it is retried after
a timeout and then reissued (from the source core) until it finally succeeds. Once a
channel is created, a message of one or more flits can be transferred. Unfortunately,protocol messages are also subject to deadlock. Hence, the library must provide a
timeout interrupt to break out of the communication. The sending process can thus
drain pending receives (without acknowledgment since messages will be re-sent). It
may continue to send packets once all blocked receives are drained.