Bonjour à tous,
Ce problème peut facilement se résoudre à l'aide d'un sémaphore, mais la curiosité étant plus forte, je me pose la question existancielle suivante : on a une variable interprocess, par exemple un entier long nommée <>LaVariable. On considère la ligne de code suivante :
<>LaVariable:=<>LaVariable-1
Cette ligne de code est exécutée à partir du plusieurs process tournant simultanément, une seule fois par process et à des moments à priori aléatoire.
Si je ne me trompe pas, 4D devrait donc effectuer les opérations suivantes :
1 - Lire la valeur de <>LaVariable.
2 - Soustraire 1 à cette valeur
3 - Affecter la nouvelle valeur à <>LaVariable
On est dans un environnement multiprocess, il est donc normal que le process puisse être suspendu entre le point 1 et le point 2, ou entre le point 2 et le point 3. Si lors de cette suspension, un autre process effectue le même code, on se retrouve avec le problème classique que le process qui s'est fait interrompre va calculer la nouvelle valeur à partir d'une valeur obsolète.
Là où se pose le "problème", c'est que j'ai l'impression que la fréquence à laquelle l'interruption se fait juste après la lecture de <>LaVariable et juste avant son écriture est particulièrement élevée, comme si le fait de lire la variable "coûtait" au process, et faisait descendre son niveau de priorité par rapport aux autres process.
Avez-vous déjà remarqué ce phénomène, ou est-ce simplement mon impression qui est faussée ? Qu'en pensez-vous ?
Partager