1. A method of submitting data to a shared queue by multiple producer threads, the method comprising: allocating a portion of memory in the shared queue for storing first thread output data to be written by a first producer thread of the multiple producer threads by advancing an outer pointer that indicates a next entry in the shared queue that is available for allocation, wherein the order in which the multiple producer threads store thread output data in the shared queue is different than the order in which contiguous portions of memory in the shared queue are allocated to the multiple producer threads; writing, by the first producer thread, the first thread output data to the portion of memory; determining, by the first producer thread, if the portion of the shared queue that was written was the only portion of memory in the shared queue that was allocated and had not been written; and advancing an inner pointer that indicates a last contiguous entry in the shared queue that has been submitted to the shared queue when the first producer thread determines that the portion of the shared queue that was written was the only portion of memory in the shared queue that was allocated and had not been written.