Něco k frontě ============= QUEUE_BUFFER definuje délku fronty. V konstruktoru se dá jako parametr velikost fronty, jinak je defaultně právě QUEUE_BUFFER. Fronta je používaná v multithreadovém prostředí, takže je nutný zámek pro vzájemné vyloučení. Dále klasicky používá dva semafory. V semFull je počet zpráv, které je právě ve frontě. SemEmpty je počet volných míst ve frontě. Semafory používáme z knihovny, kterou jsme stáhli ze sítě, implementují je pomocí condition variables a zámků. Zámky jsou normálně ve standardní implementaci vláken FreeBSD. V konstruktoru se též vytvoří pole ukazatelů na typ Message. To může být cokoli, fronta dovnitř nehrabe. Fronta si také samozřejmě udržuje index první položky a index položky poslední. V append() se zvedne semFull, pak se zamkne kritická sekce, zpráva se přidá do fronty, odemkne se, položí se semafor semEmpty. If je request SOFT, kontroluje se nejdříve, zda fronta není plná, v takovém případě se vrací hodnota MSGQ_FULL. Je to kvůli tomu, že nechceme, aby se Mix dostal do deadlocku. Tímto mechanismem můžeme v nejhorším zahazovat zprávy, které by jinak mohli zablokovat Mix. Při přidávání zpráv se postupuje tak, že se zjistí, odkud se brala zpráva a zprávy se přisunou k sobě (zlikvidují prázdné místo) z té strany, kde se bude dělat méně přesunů. Tedy implementace je dost jednoduchá, ale zato funkční.