C'est juste un petit tuto sur la synchronisation. Il pourra être augmenté par la suite. Ici, je ne vais parler que des mutex (mutal exclusion)
Alors le problème (par exemple) est le suivant : dans un prog, on a une variable globale, disons var, par exemple un tableau.
le programme, dans son exécution crée disons deux threads avec createthread(@proc1(),0) et createthread(@proc2(),0)
avant d'aller plus loin, penser que le prog principal crée lui même un thread : le thread primaire associé au processus.
Donc il y a pour le système 3 threads associés au processus.
Evidemment, windows c'est du "faux multitâche" : il n'y a qu'un processeur... (le "vrai multitâche", c'est quand il y a plusieurs processeurs qui font tourner divers processus en même temps)
Ce qui se passe, c'est que le système gère l'accès au processeur, en donnant régulièrement l'accès aux divers threads en cours, selon divers critères, dont leur niveaux de priorité. (en plus il s'occupe de l'envoi des messages,..., mais ça nous intéresse pas ici)
la variable var est modifiée/lue dans le prog principal et les deux threads.
disons que var est modifiée dans des boucles dans les trois threads.
Alors un thread s'effectue. On est dans la boucle.
Puis en cours de route, le système passe la main à un autre qui modifie aussi var avant que le précédent ai fini sa boucle.
Résultat?
Ben c'est le b..., et les résultats sont aléatoires. Des fois ça marche, des fois non.
Un outil de synchronisation (le plus simple), c'est le mutex
Dans le prog, au début, on crée un mutex:
nommutex.s="salutjesuisunmutex"
hmutex=CreateMutex_(0,0,@nommutex)
On a ainsi créé un mutex avec l'handle hmutex, qui n'est au départ possédé par aucun thread.
On peut alors utiliser deux commandes:
WaitForSingleObject_(hmutex,temps) :
attend que le mutex se libère et en prend possession. temps=temps maximal d'attente en ms. si temps=0, attend indéfiniment.
ReleaseMutex_(hmutex):
relâche le mutex
Alors on encadre chaque séquence d'instructions utilisant var et devant s'effectuer intégralement sans que d'autres modifs de var liées à un autre thread interfèrent entre un WaitForSingleObject_(hmutex,temps) et un ReleaseMutex_(hmutex).
Et y'a plus de problème. (enfin théoriquement

NB : comment fait-on pour mettre ça en anonce?
Si quelqu'un pouvait le faire.
Et puis cette rubrique pourra être augmentée au fur et à mesure.
Je propose aussi de créer un tuto "communication inter-processus".
Qui commence?