Собственно и вопрос-то в том как сделать самодельную очередь.
Потому, например, что готовая очередь может по каким-то причинам не
подходить. Например, работает только с сообщениями фиксированного
размера. Да, можно пересылать указатели на сообщения, но тогда на
каждое нужно выделять память. Кроме того, если очередь реализована,
условно, через системный вызов -- то работа с такой очередью
становится очень тяжёлой, по сравнению с другими примитивами
синхронизации, которые по большей частьи могут быть реализованы в userspace (до тех пор, пока не нужна блокировка текущего или побудка другого потока). Ведь разница между легким мьютексом и тяжелым сисколлом может составлять тысячи тактов.