[MUTEX] difference entre ce bout de code et un mutex

difference entre ce bout de code et un mutex [MUTEX] - Algo - Programmation

Marsh Posté le 21-06-2002 à 18:00:49    

#define TEST              123
#define DEBLOQUE 124
#define BLOQUE       125
 
int x_freeze(int q)
{
  static int etat = DEBLOQUE;
   
  if(q == TEST && etat == BLOQUE)
    return(BLOQUE);
  else if(q == TEST && etat == DEBLOQUE)
    return(DEBLOQUE);
  else if(q == BLOQUE || q == DEBLOQUE)
    {
      etat = q;
      return(OK);
    }
  return(ERROR);  
}
 
pour bloquer mq thread j'utilise ce morceau de code au lieu d'un mutex
en gros ca donne ca
 
 while(x_freeze(TEST) == BLOQUE);
  x_freeze(BLOQUE);
 traite();
  x_freeze(DEBLOQUE);
 
utiliser cela a la place d'un mutex peut il engendrer un pb ??? (si oui pkoi?)
reelement que se cache t'il derriere un mutex  ??


---------------
télétunestel ouimélétuness sitélétunes mélétunetron [:koulip31] [:suri]
Reply

Marsh Posté le 21-06-2002 à 18:00:49   

Reply

Marsh Posté le 21-06-2002 à 18:08:33    

Réfléchis 5 minutes. Si tu as un changement de contexte entre ces deux lignes :
 
while(x_freeze(TEST) == BLOQUE);
x_freeze(BLOQUE);  
 
... deux threads à la fois peuvent lancer traite(), et tu l'as dans le fion.
 
 
Les mutex utilisent les fonctions atomiques du processeur. Comme un changement de contexte peut avoir lieu absolument n'importe quand, il faut utiliser les fonctions atomiques du processeur. C'est pour ça qu'on a implémenté la fonction dite test_and_set dans les processeurs, qui modifie le contenu d'un mot ET retourne son ancienne valeur, en une instruction.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 21-06-2002 à 22:53:58    

Jar Jar a écrit a écrit :

Réfléchis 5 minutes. Si tu as un changement de contexte entre ces deux lignes :
 
while(x_freeze(TEST) == BLOQUE);
x_freeze(BLOQUE);  
 
... deux threads à la fois peuvent lancer traite(), et tu l'as dans le fion.
 
 
Les mutex utilisent les fonctions atomiques du processeur. Comme un changement de contexte peut avoir lieu absolument n'importe quand, il faut utiliser les fonctions atomiques du processeur. C'est pour ça qu'on a implémenté la fonction dite test_and_set dans les processeurs, qui modifie le contenu d'un mot ET retourne son ancienne valeur, en une instruction.  




 
escuse moi mon ignorance  
mais qu'est ce que c'est un changement de contexte ????  
 
a part : pour les mutex leur nombres sont il limités ?? ou on peut en mettre autant sue je veux ???

Reply

Marsh Posté le 21-06-2002 à 23:28:03    

Un changment de contexte, c'est quand le processeur passe d'un thread à un autre (chaque thread est traité en réalité séquentiellement sur un monoprocesseur) et tu n'as aucun moyen avec un OS multitâche préemptif de savoir quand il va être supsendu pour qu'un autre thread puisse être executé.
 
Un mutex évite par exemple le problème susmentionné, quant aux limitations je ne les connais pas

Reply

Marsh Posté le 22-06-2002 à 11:29:14    

merci de ces explications ..
maintenant je capiche mieux le pourquoi de choses  
 :)


---------------
télétunestel ouimélétuness sitélétunes mélétunetron [:koulip31] [:suri]
Reply

Marsh Posté le 22-06-2002 à 14:58:07    

Non, les mutex ne sont pas limités, pas plus que les sémaphores. Tu peux créer des objets pthread_mutex_t ou sem_t à volonté.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 22-06-2002 à 15:57:46    

Jar Jar a écrit a écrit :

Non, les mutex ne sont pas limités, pas plus que les sémaphores. Tu peux créer des objets pthread_mutex_t ou sem_t à volonté.  




 
ouais enfin tant que t'as de la ram et du swap pour les ressources du noyau de l'os... :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed