A method for accessing cells of a ring buffer by two or more writers, the ring buffer having a current writer cell position value stored in each of a done writer index as a done writer index value and a reserved writer index as a reserved writer index value, a current reader cell position value stored in a done reader index as a done reader index value, and the current writer cell position value being not equal to the current reader cell position value, the method comprising: for each of the two or more writers: copying the current writer cell position value from the reserved writer index to an old writer variable as an old writer variable value; assigning a trial next writer cell position value to a new writer variable as a new writer variable value; determining whether the trial next writer cell position value is acceptable, the trial next writer cell position value being acceptable only if the trial next writer cell position value as assigned to the new writer variable is not equal to the done reader index value as stored in the done reader index; as an atomic operation, first, determining whether the trial next writer cell position value is acceptable as a next writer cell position value, the trial next writer cell position value being acceptable as the next writer cell position value only if the reserved writer index value is equal to the old writer variable value, and second, replacing the reserved writer index value with the new writer variable value; after completing the atomic operation, writing data to a cell of the ring buffer indicated by the new writer cell position value; and, only when the done writer index value is equal to the old writer variable value, replacing the done writer index value with the new writer variable value; whereby the two or more writers are prevented from simultaneously accessing the cell of the ring buffer. for each of the two or more writers: copying the current writer cell position value from the reserved writer index to an old writer variable as an old writer variable value; assigning a trial next writer cell position value to a new writer variable as a new writer variable value; determining whether the trial next writer cell position value is acceptable, the trial next writer cell position value being acceptable only if the trial next writer cell position value as assigned to the new writer variable is not equal to the done reader index value as stored in the done reader index; as an atomic operation, first, determining whether the trial next writer cell position value is acceptable as a next writer cell position value, the trial next writer cell position value being acceptable as the next writer cell position value only if the reserved writer index value is equal to the old writer variable value, and second, replacing the reserved writer index value with the new writer variable value; after completing the atomic operation, writing data to a cell of the ring buffer indicated by the new writer cell position value; and, only when the done writer index value is equal to the old writer variable value, replacing the done writer index value with the new writer variable value; whereby the two or more writers are prevented from simultaneously accessing the cell of the ring buffer. copying the current writer cell position value from the reserved writer index to an old writer variable as an old writer variable value; assigning a trial next writer cell position value to a new writer variable as a new writer variable value; determining whether the trial next writer cell position value is acceptable, the trial next writer cell position value being acceptable only if the trial next writer cell position value as assigned to the new writer variable is not equal to the done reader index value as stored in the done reader index; as an atomic operation, first, determining whether the trial next writer cell position value is acceptable as a next writer cell position value, the trial next writer cell position value being acceptable as the next writer cell position value only if the reserved writer index value is equal to the old writer variable value, and second, replacing the reserved writer index value with the new writer variable value; after completing the atomic operation, writing data to a cell of the ring buffer indicated by the new writer cell position value; and, only when the done writer index value is equal to the old writer variable value, replacing the done writer index value with the new writer variable value; whereby the two or more writers are prevented from simultaneously accessing the cell of the ring buffer.