Test de concurrence de plusieurs processus sur une variable

Objectif : Savoir si l'accès à des instances de cellules par plusieurs mobiles/processus est pris en charge par le temps d'éxécution des processus où si le processus principal prends en charge les modifications. Dans ce dernier cas, cela provoquerait l'attente de deux mobiles/processus alors qu'ils n'ont rien en commun !

Demandez le programme !

Le programme teste l'accès concurrent de 8 processus sur un seul objet. L'objet est crée dans le bloc principal puis passé en paramètre lors de la création des processus.
Au final, les processus du programme sont les 8 processus concurrents ainsi que le programme principal. Celui-ci se contente de créer les objets et de les lancer puis de déclarer qu'il a fini.

L'accès à la variable est piégé par une boucle d'attente. Cela permet de constater si les modifications peuvent se faire en parallèle.


Il y a deux voies possibles :

1) Soit les processus doivent patienter que le processus principal a traité les demandes. La modification de la variable est faite par le processus principal.

Dans ce cas-là, le temps total d'attente est de l'ordre du nombre de processus (8) multiplié par le nombre de tour de boucles (3) et par le temps d'attente. De plus le rythme d'arrivée des processus devrait être régulier car ils attendraient patiamment que le processus principal traite leur demande.

 

2) Soit les processus prennent eux-même l'initiative de modifier la variable. La modification de la variable est pris sur leur temps d'exécution.

Le temps total d'attente ne devrait être que de l'ordre du tour de boucle multiplié par le temps d'attente. C'est-à-dire que chaque processus purgerais son temps d'attente dans son coin. L'ordre d'arrivée des processus devrait être simultané au bout de chaque temps d'attente. A la manière de chevaux de courses franchissant une barrière.


Mes tests penchent très nettement en faveur de la deuxième possibilité.

En ajoutant la clause synchronized à la méthode de modification de la variable, le phénomène d'attente se produit (mutex) et la première solution devient valable mais ce n'est pas le comportement "naturel" des processus et le temps d'attente dû au mutex reste toujours à charge des processus.

Cela signifie, sauf erreur, que deux mobiles/processus peuvent "modifier" simultanément deux instances séparées de cellules sans qu'il n'y ait d'attente.

CQFD ?