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.