Voici un certain code à partir d'une file d'attente sans verrouillage à l'aide de comparaisant (en Java): (tête et queue sont les membres de la file d'attente) p> in La fonction DEQ et ENQ, le premier chèque semble inutile pour moi. (Ceux commencient avec "???")
Je soupçonne que c'est là juste pour une sorte d'optimisation. P> est-ce que je manque quelque chose ici? Ces chèques affectent-ils l'exactitude du code? P> (le code est extrait de "l'art de la programmation multi-processeur", bien que j'ai refacturé le style de code pour avoir moins imbriqué IFS et ESSES, tout en maintenant l'équivalent de code) p> p>
3 Réponses :
Ils ne sont pas nécessaires mais utilisés pour des raisons de performance, remarquez que le chèque se produit sans utiliser d'opération atomique. P>
Exemple coûts de MSDN : p>
référence pour cette technique particulière: p>
[Rudolph & Segall 84] Rudolph, L. et Segall, Z. Dy-Namic décentralisé Schémas de cache formime parallèle Processeurs. Invù Roancements de Theíúvúth Symposium annuel sur Architecture COM-Puter, Pages 340i> 347, 1984. P> blockQuote>
Ouais, en Java, étant donné qu'il a une collection de déchets, ces ifs n'ont qu'une valeur réelle comme optimisation, et c'est un peu une grosse: CAS est incroyablement coûteux comparé à une lecture de la mémoire. t a changé entre-temps et diminuant ainsi les chances d'échouer sur le CAS ultérieur, contribue à réduire le nombre de tentatives de réseau, ce qui aide les performances.
Vous pouvez également déplacer le premier == Vérification de la mise à jour de la queue à l'intérieur. La tête.ca, une optimisation supplémentaire: la queue ne peut être décalée derrière uniquement si la tête a été mise à jour, ce qui ne vérifie donc que si le CAS a réussi a du sens. Vous pouvez également déplacer Tail.get là-bas alors, comme vous n'en avez pas besoin nulle part ailleurs. Exemple de code ci-dessous. J'espère que cela aide! P> } p> p>
C'est un algorithme de liste lié non bloquante. Une description détaillée se trouve dans le livre JCP (15.4.2. Une liste liée non bloquante) p>
Ils semblent vérifier que les variables locales ont été fixées de manière cohérente, mais je laisserai à d'autres personnes de répondre si elles affectent l'exactitude du code.