Bonjour,

Pour ma culture personnelle je m'intéresse au Threads et aux Sémaphores, en fait j'ai plusieurs fonctions lancées par des threads et ne souhaite pas qu'elles s'exécutent en même temps (je veux être certain que lorsqu'une se lance, aucune des autres n'est en court).

J'ai essayé de traduire ça par un exemple avec 2 fonctions identiques lancées par threads qui écrivent l'heure dans 2 champs distincts.

Est-ce que ce code induit l'exécution d'une fonction à la fois, sans "chevauchement" ou je me plante ?


Code d'appel
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
SémaphoreCrée("ZoneCritique",1,0,partageAucun)
ThreadExécute("Thread1",threadContexteGlobal,AfficheHeure)
ThreadExécute("Thread2",threadContexteGlobal,AfficheHeure2)
Procédure 1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
PROCEDURE AfficheHeure()
i est un entier =1
TANTQUE i=1
	SI SémaphoreDébut("ZoneCritique") = Vrai ALORS
		SAI_Heure = HeureSys()
		SémaphoreFin("ZoneCritique")
		ThreadPause(1000) // endort le Thread 10 secondes	
	FIN	
FIN
Procédure 2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
PROCEDURE AfficheHeure2()
i est un entier =1
TANTQUE i=1
	SI SémaphoreDébut("ZoneCritique") = Vrai ALORS
		SAI_Heure2 = HeureSys()
		SémaphoreFin("ZoneCritique")
		ThreadPause(500) // endort le Thread 5 secondes	
	FIN	
FIN
Merci