CreateSemaphore() CreateMutex()

Sujets variés concernant le développement en PureBasic
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

CreateSemaphore() CreateMutex()

Message par nico »

Salut,

CreateSemaphore() CreateMutex()

Lorsqu'on regarde ces deux API sur MSDN, il est indiqué qu'elle fonctionne à partir de window 2000.

Dans l'aide de Purebasic, c'est indiqué pour tous O.S

Alors ma question est la suivante, ces fonctions fonctionne t'elle sur toutes les versions de window :?:
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

reste plus qu'a tester sur les OS. Moi j'ai toujours pas compris l'intérêt de ces fonctions ... je sais honte a moi ... :oops: je te proposerais bien de t'aider , mais le plus vieux OS que j'ai est XP :(
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Message par poshu »

Ces fonctions ne servent que si tu multithread ton programme (pour éviter d'avoir des comportements "étranges" voir des gros crash en cas d'accès simultanés à des ressources); si tu multithread pas, tu t'en fout.
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

poshu a écrit :Ces fonctions ne servent que si tu multithread ton programme (pour éviter d'avoir des comportements "étranges" voir des gros crash en cas d'accès simultanés à des ressources); si tu multithread pas, tu t'en fout.
Merci pour ces precision ... :)
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Exemple basic:

Thread 1 produit qqchose, et Thread 2 consomme.

Code : Tout sélectionner

Declare GetRessourceQuantity()
Declare SetRessourceQuantity(nb)

; Thread 1
Procedure Produit(nb.l)
  val = GetRessourceQuantity()
  SetRessourceQuantity( val + nb )
EndProcedure

; Thread 2
Procedure Consomme(nb.l)
  val = GetRessourceQuantity()
  SetRessourceQuantity( val - nb )
EndProcedure
Le corps des fonctions ne sera pas execute en une seule instruction ASM, donc un thread peut rendre la main a l'autre pendant l'execution de cette simple procedure.

cas de figure: production de 5 elements, consommation de 3 elts. Declenchement quasi instantane.
Thread 1, recupere la valeuer dans "val" (disons que 'val' vaut 10), puis il passe la main a Thread2 qui recupere cette valeur aussi et qui repasse la main.
Ensuite le SetRessQty() est execute dans les deux cas:
Thread1 : si on rappelle GetRessourceQuantity() on obtient : 10 + 5 = 15
Thread2 : si on rappelle GetRessourceQuantity() on obtient : 10 - 3 = 7, car on fait bien la soustraction de 10 et de 3. La mise a jour precedente a ete ignoree et les 5 ressources produites ont disparue...
Et ca peut egalement ce passer si on avait tout reduit en une ligne:

Code : Tout sélectionner

SetRessourceQuantity( GetRessourceQuantity() +/- nb )
.

/Liå :wink:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Répondre