A server for transporting data using shared memory, where in the server comprises: shared memory, wherein the shared memory is partitioned into one or more pages and a free list, the free list having a first free pointer pointing to a first free page of the free list and the free list being a circular buffer data structure; a plurality of sender applications comprising a first sender application and a second sender application, wherein: the first sender application and the second sender application are both operable to identify a same first free page from among the partitioned pages by reading the first free pointer from the free list; the first sender application and the second sender application are operable to compete to allocate the first free page; the first sender application is operable to allocate the first free page identified by the first sender application and the second sender application when the first sender application completes a compare and swap operation before the second sender application, wherein the first sender application completes the compare and swap operation before the second sender application when the first sender application sets the first free page to point to an allocated pages list of the first sender application; the first sender application is operable to write data to the allocated page, wherein a page is either available for use or allocated to only one of the sender applications; the allocated page becomes available for a receiver application to read data after the first sender application has completed writing the data; the first sender application is operable to send a signal to the receiver application, wherein the signal notifies the receiver application that writing the data to the allocated page is complete; and the free list is accessible directly by the sender applications; and the receiver application, wherein the receiver application is operable to read the data from the allocated page and de-allocate the allocated page, wherein each of the pages available for use can be allocated to any one of the plurality of sender applications. shared memory, wherein the shared memory is partitioned into one or more pages and a free list, the free list having a first free pointer pointing to a first free page of the free list and the free list being a circular buffer data structure; a plurality of sender applications comprising a first sender application and a second sender application, wherein: the first sender application and the second sender application are both operable to identify a same first free page from among the partitioned pages by reading the first free pointer from the free list; the first sender application and the second sender application are operable to compete to allocate the first free page; the first sender application is operable to allocate the first free page identified by the first sender application and the second sender application when the first sender application completes a compare and swap operation before the second sender application, wherein the first sender application completes the compare and swap operation before the second sender application when the first sender application sets the first free page to point to an allocated pages list of the first sender application; the first sender application is operable to write data to the allocated page, the first sender application and the second sender application are both operable to identify a same first free page from among the partitioned pages by reading the first free pointer from the free list; the first sender application and the second sender application are operable to compete to allocate the first free page; the first sender application is operable to allocate the first free page identified by the first sender application and the second sender application when the first sender application completes a compare and swap operation before the second sender application, wherein the first sender application completes the compare and swap operation before the second sender application when the first sender application sets the first free page to point to an allocated pages list of the first sender application; the first sender application is operable to write data to the allocated page, wherein a page is either available for use or allocated to only one of the sender applications; the allocated page becomes available for a receiver application to read data after the first sender application has completed writing the data; the first sender application is operable to send a signal to the receiver application, wherein the signal notifies the receiver application that writing the data to the allocated page is complete; and the free list is accessible directly by the sender applications; and the allocated page becomes available for a receiver application to read data after the first sender application has completed writing the data; the first sender application is operable to send a signal to the receiver application, wherein the signal notifies the receiver application that writing the data to the allocated page is complete; and the free list is accessible directly by the sender applications; and the receiver application, wherein the receiver application is operable to read the data from the allocated page and de-allocate the allocated page, wherein each of the pages available for use can be allocated to any one of the plurality of sender applications.