Des files d'attente sans verrouillage peuvent être implémentées pour le cas d'un seul producteur / consommateur unique, et vous pouvez souvent concevoir votre logiciel pour minimiser le nombre de files d'attente multi-producteurs ou multi-consommateurs.
Une file d'attente sans verrou peut être construite comme suit: Allouez un tableau des éléments à communiquer, ainsi que deux entiers, appelez-les Head et Tail. Head est un index dans le tableau, où l'élément suivant sera ajouté. Tail est un index dans le tableau, où l'élément suivant est disponible pour être supprimé. La tâche de producteur lit H et T pour déterminer s'il y a de la place pour ajouter un élément; écrit l'élément dans l'index H, puis met à jour H. Les tâches de consommation lisent H et T pour déterminer s'il y a des données disponibles, lit les données de l'index T, puis met à jour T. Fondamentalement, il s'agit d'un tampon en anneau auquel accèdent deux tâches, et le l'ordre des opérations (insérer, puis mettre à jour H; supprimer, puis mettre à jour T) garantit que la corruption des données ne se produit pas.
Si vous avez une situation avec plusieurs producteurs et un seul consommateur, ou un seul producteur et plusieurs consommateurs, vous avez effectivement une limitation de ressources quelconque, et il n'y a rien d'autre à faire que d'utiliser la synchronisation, car le limiteur de performances est plus susceptible de être le seul producteur / consommateur qu'un système d'exploitation avec le mécanisme de verrouillage.
Mais si vous avez plusieurs producteurs ET consommateurs, cela vaut la peine de passer du temps (dans l'espace de conception) pour voir si vous ne pouvez pas obtenir un mécanisme de communication plus coordonné; dans un cas comme celui-ci, la sérialisation de tout via une seule file d'attente fait définitivement de l'efficacité de la file d'attente le déterminant central des performances.