4 votes

Y a-t-il des algorithmes concurrents en cours d'utilisation qui fonctionnent correctement sans aucune synchronisation?

Tous les programmes concurrents que j'ai vus ou dont j'ai entendu parler (admettant que c'est un petit ensemble) utilisent à un moment donné des fonctionnalités de synchronisation matérielle, généralement sous forme de compare-and-swap. La question est : y a-t-il des programmes concurrents dans la nature où les threads interagissent tout au long de leur vie sans aucune synchronisation ?

Voici des exemples auxquels je pense :

Un programme qui se résume à un seul thread exécutant un test oui/non sur un grand ensemble de cas et un grand nombre de threads étiquetant les cas en fonction d'un test peut-être/non. Cela ne nécessite pas de synchronisation car les données non fiables n'affecteront que les performances et non la correction.

Un programme dans lequel de nombreux threads mettent à jour une structure de données où tout état valide maintenant le restera toujours, donc les lectures ou écritures non fiables ne rendent rien invalide. Un exemple de ceci est (je pense) la compression de chemin dans l'algorithme union-find.

1voto

Ben Manes Points 1790

L'exemple le plus simple se trouve dans java.lang.String qui est immuable et met en cache paresseusement son code de hachage. Ce cache est écrit sans synchronisation car (a) c'est moins cher, (b) la valeur est recomputable, et (c) la JVM garantit aucune divulgation. La tolérance des courses de données dans les contextes purement fonctionnels permet l'utilisation de techniques comme celle-ci de manière sécurisée sans synchronisation explicite.

0voto

batbrat Points 3481

Je suis d'accord avec la réponse de Mitch. J'aimerais ajouter que l'algorithme de traçage de rayons peut fonctionner sans synchronisation jusqu'au point où tous les threads se rejoignent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X