Je construis un état partagé thread-safe avec MVar et en raison des exigences, j'ai besoin de garanties d'équité (si deux threads demandent un état sous MVar l'un après l'autre, dès que l'état est disponible les threads le prendront dans l'ordre dans lequel ils l'ont demandé).

Je n'ai trouvé aucune note dans le MVar documentation.

Donc, en cas de garanties d'équité, est-il nécessaire de créer une sorte de wrapper de ReentrantLock(true) fair lock ?

2
Some Name 15 nov. 2020 à 07:31

1 réponse

Meilleure réponse

Je ne sais pas quelles sont les garanties exactes, mais dans l'effet des chats, l'équité est fréquemment mentionnée en termes de planificateur. Cela signifie que vous ne pourrez peut-être pas obtenir l'ordre exact que vous avez mentionné lors de la première acquisition d'un MVar, mais personne ne devrait être affamé, car après votre tour, vous cédez votre fibre et devez être reprogrammé avant d'acquérir le MVar à nouveau.

En d'autres termes, si vous avez besoin d'un ordre exact ou d'un round robin exact, vous devrez l'implémenter vous-même, mais si vos exigences sont vraiment quelque chose comme "chaque fibre éligible obtient à peu près la même durée d'exécution sans être affamée", alors vous obtenez cela presque gratuitement.

2
Karl Bielefeldt 16 nov. 2020 à 15:22