A method for managing a buffer which is divided into a plurality of blocks, the blocks being used cyclically in a predetermined order by producers and consumers as a temporary storage location for data to be transferred between processing entities, the producers being processing entities for writing data, the consumers being processing entities for reading data written by the producers, the method comprising: updating and retaining block state information (130a, 130b) including write completed-or-not information and read completed-or-not information, the write completed-or-not information indicating whether associated blocks are write-completed or not, the read completed-or-not information indicating whether associated blocks are read-completed or not; providing the first block to be written in the predetermined order with a first leading pointer, a second leading pointer, a first following pointer, and a second following pointer which designate the block; and after a block starts to be written, moving the first leading pointer designating the block to a next block, after the block designated by the second leading pointer finishes being written, moving the second leading pointer to a block next to a block that is farthest from the second leading pointer among consecutive write-completed blocks subsequent to the block designated by the second leading pointer, after a block starts to be read, moving the first following pointer designating the block to a next block, and after the block designated by the second following pointer finishes being read, moving the second following pointer to a block next to a block that is farthest from the second following pointer among consecutive read-completed blocks subsequent to the block designated by the second following pointer, under a constraint that all the pointers (144, 145, 148, 149) move in the same direction, and the first leading pointer, the second leading pointer, the first following pointer, and the second following pointer do not pass each other in this order. updating and retaining block state information (130a, 130b) including write completed-or-not information and read completed-or-not information, the write completed-or-not information indicating whether associated blocks are write-completed or not, the read completed-or-not information indicating whether associated blocks are read-completed or not; providing the first block to be written in the predetermined order with a first leading pointer, a second leading pointer, a first following pointer, and a second following pointer which designate the block; and after a block starts to be written, moving the first leading pointer designating the block to a next block, after the block designated by the second leading pointer finishes being written, moving the second leading pointer to a block next to a block that is farthest from the second leading pointer among consecutive write-completed blocks subsequent to the block designated by the second leading pointer, after a block starts to be read, moving the first following pointer designating the block to a next block, and after the block designated by the second following pointer finishes being read, moving the second following pointer to a block next to a block that is farthest from the second following pointer among consecutive read-completed blocks subsequent to the block designated by the second following pointer, under a constraint that all the pointers (144, 145, 148, 149) move in the same direction, and the first leading pointer, the second leading pointer, the first following pointer, and the second following pointer do not pass each other in this order.