Modern computer systems often deal with large volumes of data. A computer system may have two related processes concurrently executing and processing the set of data. For example, one process may create or retrieve data, while the other process concurrently analyzes or processes the data to accomplish some task. Various traditional algorithms, such as the “ring-buffer” or LIFO stack, are used for buffering the data between the processes. These techniques normally require manipulation of control structures to ensure the integrity of the buffers and chains. These conventional manipulations may include locking of complex structures, spin-loops, or suspensions.