Цитата(toweroff @ Feb 4 2015, 13:32)

что-то типа:
на скорую руку, так что проверяйте

недостаток - размер массивов по степени двойки, тип, разумеется, можно сделать какой нужно
"...иногда лучше молчать, чем говорить" (с)
Топикстартер явно упомянул многопоточность, а тут конструкции, типа "data[obuf_start++ & OBUF_MASK]".
Треды, атомарность, синхронизация.. слышали про такое ?
Можно сделать закат солнца вручную, т.е. написать свою очередь. Это не сложно. Сложно сделать так, чтобы оно работало правильно.
В самом тупом случае берутся примитивы синхронизации, типа мютексов, пишется тупая кольцевая очередь, где PutData() / GetData() обвешаны этими мютексами как новогодние елки.
Тупо, примитивно, не сильно оптимально по быстродействию и требует наличия ОС.
Если ОС нет или нужно выжать производительность, пишется неблокирующая очередь (а потом еще полгода отлаживается). Тут уже в ход идут такие вещи, как intrinsic функции для атомарного инкремента/декремента, реализация CAS, спинлоки и memory barriers если хотим, шоб оно еще не глючило на многоядерных системах..
.. Это один из любимых вопросов на собеседованиях в конторах типа АРМа..
В промежуточном случае пишутся свои мютексы. Но тут опять же надо очень хорошо разбираться в том, что делаешь.
Можно положиться на факт, что присваивание 32-битных значений атомарное, но для многоядерных систем все сильно сложнее с чтением и записью в одну переменную с разных ядер.