Comment puis-je créer une file d'attente sans verrouillage?

J'ai passé aujourd'hui à la recherche dans lockless files d'attente. J'ai plusieurs producteurs, plusieurs consommateurs de la situation. J'ai mis en place, pour les essais, un système à l'aide du Contrefil SList chose sous Win32 et il a doublé la performance de mon lourdement filetée de la tâche en fonction du code. Malheureusement, si, je vous souhaite de prendre en charge plusieurs plates-formes. Verrouillage sur de multiples plates-formes en soi n'est pas un problème et je peux supposer que je peux verrouillage sans problèmes. Toutefois, la mise en œuvre effective perd moi.

Le gros problème semble être que vous avez besoin pour garantir une liste push/pop utilisera un seul Contrefil appel. Sinon, vous laissant de l'espace pour un autre thread pour étouffer dans et vis les choses. Je suis pas certain de savoir comment la mise en œuvre de microsoft fonctionne sous le capot et aimerais en savoir plus.

Quelqu'un peut-il me diriger vers de l'information utile (Plate-forme et du langage sont assez hors de propos)?

Ajouté à qui j'aimerais savoir si ses possible de mettre en œuvre un lockless vecteur. Qui aurait d'énormes quantités d'utilisation pour moi 🙂
Cheers!

Edit: après Avoir lu la plante DDJ l'article, je peux voir une réduction de la serrure de la file d'attente qui est assez similaire à celui que j'avais déjà. Cependant je remarque qu'il y a des papiers à la fin qui peut faire le vrai lockless file d'attente avec l'aide d'un double compare-and-swap (DCAS). Quelqu'un a mis en place une file d'attente à l'aide de cmpxchg8b (ou cmpxchg16b d'ailleurs)?

Je suis juste en rêvant à ce point (n'ayant pas lu les journaux), mais vous pouvez utiliser ce système pour mettre à jour la tête et la queue pointeur simultanément et ainsi d'éviter des problèmes avec un autre thread de saut entre les 2 opérations atomiques. Cependant, vous avez encore besoin de prendre la tête du pointeur pour tester que par rapport à l'indicateur de queue pour voir si yo ont juste modifié la queue. Comment éviter de faire un autre thread modification de cette information, tandis que l'autre thread se prépare à le faire lui-même? Comment cela est-il mis en œuvre dans un lockless? Ou suis-je mieux de lire le undecipherability qui est un document de recherche? 😉

source d'informationauteur Goz