4
Est-ce que quelqu'un est au courant d'une manière sans verrou d'effectuer ce qui est logiquement équivalent à un compare_and_swap_if_greater_than()? Nous avons compare_and_swap(), qui est en fait compare_and_swap_if_equal(). Le mieux que je puisse faire en ce moment est d'utiliser un mutex de spin, mais je pense qu'avec les utilisations de l'historique, des boucles, et de compare_and_swap(), il est possible d'éviter cela.Incrément sans verrouillage si supérieur à
Je ne suis pas sûr que ce soit correct. Je pense que minimalement vous avez besoin d'une boucle autour de cette dernière condition dans le OU pour le cas où! = CurrentValue. Je pourrais certainement avoir tort cependant. – tgoodhart
@tgoodhart: Je pense que la boucle externe s'occupe de ce cas. C'est une formulation assez standard pour la mise à jour atomique d'une valeur en utilisant compare & swap ... Read old value; calculer une nouvelle valeur; stocker conditionnellement la nouvelle valeur; et essayez à nouveau si quelqu'un vous a battu. Je crois que cela fonctionne. – Nemo
Yup. Tu as raison. – tgoodhart