Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1464 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  Sémaphore ? Mutex ? c'est quoi ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Sémaphore ? Mutex ? c'est quoi ?

n°320173
Vic le vik​ing
Posté le 28-02-2003 à 13:38:56  profilanswer
 

je vois souvent ces termes apparaitre, mais je sais pas ce que c'est ni à quoi ça sert...
 
quelqu'un pour m'expliquer :??:
 
:jap:


---------------
Bougredane et bougre d'andouille ne font qu'un !
mood
Publicité
Posté le 28-02-2003 à 13:38:56  profilanswer
 

n°320190
chrisbk
-
Posté le 28-02-2003 à 13:55:58  profilanswer
 

objet pour la synchro de threads
 
un mutex a deux etats : ouvert et ferme.
Si jamais tu essaye de le fermer alors qu'il l'est deja alors tu est automatiquement mis en attente jusqu'a ce qu'il soit ouvert (et que donc tu puisse le fermer)


Message édité par chrisbk le 28-02-2003 à 13:56:15
n°320237
erwan_oops
Posté le 28-02-2003 à 14:28:16  profilanswer
 

et semaphore   c'est presque  pareille excepter que c'est un compteur/decompteur qui bloque ce lui qui veut le descendre sous zero ah aussi ce n'est pas que pour les threads mais pour le multi-process ,multi-thread


---------------
la théorie c quant tout dois fonctionner mais rien ne marche                                 la pratique c quant tout marche mais personne ne c pourquoi                           ici on fais un bon compromis rien ne marche et personne ne c pourquoi :D
n°320338
bobuse
Posté le 28-02-2003 à 16:07:08  profilanswer
 

J'ajouterai (en reformulant) que c'est utilise pour l'utilisation de ressources critiques.
 
Dans la litterature, tu as pas mal d'exemple comme les philosophes mangeur de spaghetti. Le plus classique est celui du producteur consommatteur.
 
Tu as un client qui demande a consommer un produit, qu'il va chercher dans une reserve. La contrainte est qu'il ne peut aller chercher un produit que si il en reste. Si la reserve est vide, il est bloque, jusqua'a ce que le producteur fournissent une unite.
 
Bon voila, c'est resume ... bonne recherche


---------------
get amaroK plugin
n°320344
djok_fb
C'était mieux avant!
Posté le 28-02-2003 à 16:10:53  profilanswer
 

erwan_oops a écrit :

et semaphore   c'est presque  pareille excepter que c'est un compteur/decompteur qui bloque ce lui qui veut le descendre sous zero ah aussi ce n'est pas que pour les threads mais pour le multi-process ,multi-thread


ou pour l'acces a des ressources partagées (lecture/ecriture dans une zone memoire partagée, un peripherique, ...)
 

n°320389
nraynaud
lol
Posté le 28-02-2003 à 16:53:58  profilanswer
 

erwan_oops a écrit :

et semaphore   c'est presque  pareille excepter que c'est un compteur/decompteur qui bloque ce lui qui veut le descendre sous zero ah aussi ce n'est pas que pour les threads mais pour le multi-process ,multi-thread


 
2 petites choses : un mutex est un sémaphore booleen.
 
C'est le regretté Dijkstra qui a introduit ce concept et le vocabulaire.

n°320401
djok_fb
C'était mieux avant!
Posté le 28-02-2003 à 16:59:22  profilanswer
 

on peut aussi dire qu'un MUTEX, c'est un semaphore avec un jeton/ticket...

n°320406
bobuse
Posté le 28-02-2003 à 17:03:55  profilanswer
 

nraynaud a écrit :


C'est le regretté Dijkstra qui a introduit ce concept et le vocabulaire.


On peut dire qu'il aura laisse quelque chose derriere lui ! :jap:  
 
Dijkstra, si tu nous lis :  :hello:  :jap:


---------------
get amaroK plugin
n°320679
nraynaud
lol
Posté le 01-03-2003 à 06:05:12  profilanswer
 

bobuse a écrit :


On peut dire qu'il aura laisse quelque chose derriere lui ! :jap:  
 
Dijkstra, si tu nous lis :  :hello:  :jap:  


 
il ne laisse pas que ça, pour en rassurer certains : "Dijkstra était littéralement malade à l'idée de programmer en C++"
 
Je trouve plus la référence, c'est con ! (surtout douteux en fait)

n°320692
LeGreg
Posté le 01-03-2003 à 10:28:29  profilanswer
 

d'ailleurs ca veut dire quoi mutex?
 
ca veut simplement dire "mutuellement exclusif":
une fois acquis il ne peut être acquis par
quelqu'un d'autre ce qui permet
de définir des sections critiques  
dans un code (section où l'on ne peut
s'engager que un à la fois lorsque l'autre est sorti).
 
Ensuite tu as les signaux (plusieurs threads
sont en attente d'un evenement dans un autre thread),  
les objets read/write (tu as un seul ticket write qui  
ne peut être acquis que lorsqu'il n'y a plus
de tickets read en circulation. Et les tickets read
ne peuvent être distribué que tant que personne
n'a acquis le ticket write.).
Tu as des strategies de priorite; si tu as plusieurs
threads qui sont en attente pour une ressource
dans quel ordre tu les reveilles ? En general
c'est une fifo (dans l'ordre d'arrivee comme chez le dentiste)
parfois il y a des ordres de priorité, on attend que la file de priorité se vide avant de servir la file des communs (comme aux urgences). Evidemment il y a parfois risque d'affamement lorsqu'il y a trop de gens dans la file prioritaire et que les communs ne sont jamais servis (comme dans la réalité..).
 
Tu as des problemes liés à la distribution des tickets: si chacun prend les tickets comme il le sent et qu'il a besoin de plusieurs tickets pour achever une tâche, alors il y a de fortes chances pour que la situation se bloque (ce qu'on appelle un deadlock ou obstruction).
 
Heureusement dans un programme d'ordinateur tu es le dieu tout
puissant et chaque ligne de code fait strictement ce que tu as demandé. Donc si la situation se bloque, il y a de fortes chances pour que ce soit de ta faute ;).
 
LeGreg


---------------
voxel terrain render engine | animation mentor
mood
Publicité
Posté le 01-03-2003 à 10:28:29  profilanswer
 

n°320708
youdontcar​e
Posté le 01-03-2003 à 11:30:47  profilanswer
 

nraynaud a écrit :

il ne laisse pas que ça, pour en rassurer certains : "Dijkstra était littéralement malade à l'idée de programmer en C++"
 
Je trouve plus la référence, c'est con ! (surtout douteux en fait)

Dr Dobb's: You've mentioned Edsgar Dijkstra. What do you think of his work?
 
Knuth: His great strength is that he is uncompromising. It would make him physically ill to think of programming in C++.
 
http://home.hccnet.nl/h.vink/lead.htm
 

n°479710
Giz
Posté le 07-08-2003 à 11:42:54  profilanswer
 

Bon ok, considerons le code ci dessous avec le mutex g_hMutex de creer. A ce que j'ai compris, dans le cas ou plusieurs threads s'executent, chacun s'execute a un instant precis d'une duree aleatoire.
Ainsi supposons que dans la boucle infini ci dessous, a un certain moment, ce thread est actif 1 seconde ; le thread s'execute, relache le jeton puis tout de suite reprend le jeton...comment les autres threads font pour avoir le jeton pile poil au moment au le thread le relache parce que si a ce moment ou le jeton est relache les autres threads ne s'execute pas, le thread qui a libere le jeton le reprend aussitot non ? :/
 
Une autre question : mes threads s'execute dans differents fichier. Pour que chacun puis acceder au Mutex, je suis oblige de passer par une variable globale ?  :heink: (puis de faire des extern)
 

Code :
  1. for (;;)
  2.      {
  3.        __try
  4.         {
  5.            // Obtenir le jeton
  6.            WaitForSingleObject(g_hMutex,INFINITE) ;
  7.            if (g_dwTemperature <= 70)
  8.             {
  9.               // L'eau n'est pas trop chaude
  10.               LaverLinge(); // durée : 30 min
  11.             }
  12.         }
  13.        __finally
  14.         {
  15.            // Rendre le jeton après que la lessive soit terminée
  16.            ReleaseMutex(g_hMutex);
  17.          }
  18.      }

n°481900
LeGreg
Posté le 09-08-2003 à 03:52:28  profilanswer
 

Certains OS garantissent que les process en attente d'un mutex seront placés dans une FIFO (first in first out).
 
Donc si ton process relache ton jeton et qu'il le reclame tout de suite apres, s'il y a deja quelqu'un qui l'a demandé (et qui a été placé dans la file d'attente) il ne sera pas servi en premier.
 
Qu'est-ce que tu entends par "plusieurs fichiers" ??
Si c'est plusieurs modules Cpp (et pas différentes applications) alors je vois pas où est le problème.
 
LeGreg

n°1562747
mecanika_c​elestina
Posté le 21-05-2007 à 07:19:10  profilanswer
 

LeGreg a écrit :

Certains OS garantissent que les process en attente d'un mutex seront placés dans une FIFO (first in first out).
 
Donc si ton process relache ton jeton et qu'il le reclame tout de suite apres, s'il y a deja quelqu'un qui l'a demandé (et qui a été placé dans la file d'attente) il ne sera pas servi en premier.
 
Qu'est-ce que tu entends par "plusieurs fichiers" ??
Si c'est plusieurs modules Cpp (et pas différentes applications) alors je vois pas où est le problème.
 
LeGreg


Salut!
Moi aussi en consultant les infos de process XP, j'y ai trouvé ce terme mutex associé à un début de ligne "mutant". Etant profane, j'avais une petite inquiétude toute relative quand même.  
Et j'ai pris un très bon plaisir à vous lire, même si je n'ai compris que superficiellement l'explicatif, (jen suis à ma premiere lecture), je vais le relire .
je peux  poster un snap si ça vous dérange pas? peut etre ce sera plus facile à expliquer non?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  Sémaphore ? Mutex ? c'est quoi ?

 

Sujets relatifs
Sémaphore[pthread] mutex et cancel
implémentation semaphore POSIX 1.bDélivrance de signaux et processus blogué par un sémaphore
[MUTEX] difference entre ce bout de code et un mutexSémaphore/Données critiques en C sous Windows
récuperer la valeur d'un semaphore sous windows[PHP] Semaphore, et transactions sur MySQL
Plus de sujets relatifs à : Sémaphore ? Mutex ? c'est quoi ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR