Plus spécifiquement, contrairement à fork(), la création de threads implique que par défaut, toutes les données sont partagées (sauf les variables locales, etc.). Donc, comme le dit Taz, une liste chaînée, c'est OK.
Par contre, pour PC Queue classique (PC = Producer/Consumer), il n'y a pas forcément besoin qu'un thread soit le coordinateur. Il suffit à chacun de s'approprier le mutex correspondant à la liste...