1. A data transfer method in which a sending processor sends data to a receiving processor via a shared memory using a put pointer stored in the shared memory, the value of which indicates a next location in the shared memory to which the sending processor is to write, and a get pointer also stored in shared memory, the value of which indicates a next location in the shared memory from which the receiving processor is to read, said data transfer method comprising the steps of: executing a data-sending process with the sending processor, the data-sending process including the steps of (1) reading a counter of outstanding acknowledgements, the counter being stored in local memory of the sending processor, so as to determine whether there is available space in shared memory, (2) if there is available space, reading the get and put pointers from shared memory and determining whether the put pointer is equal to one of plural partition indices which correspond to a number of partitions into which the shared memory is divided, (3) in a case where the put pointer is equal to one of the plural predetermined partition indices, the data-sending process writing a command requesting the receiving processor to issue an acknowledgement over a signal line that is independent of and external to the shared memory, and updating the counter of outstanding acknowledgements in said local memory of said sending processor by adding one, (4) writing a block of data into the shared memory at a location of the put pointer, and (5) updating the put pointer; suspending the data-sending process in a case where the counter of outstanding acknowledgements indicates that there is insufficient space available in the shared memory; receiving at the sending processor an acknowledgement over the signal line from the receiving processor, and updating the counter of outstanding acknowledgements by reducing the counter by one; and re-executing the data-sending process after the receiving processor issues the acknowledgement.