difference entre ce bout de code et un mutex [MUTEX] - Algo - Programmation
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.
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 ???
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
Marsh Posté le 22-06-2002 à 11:29:14
merci de ces explications ..
maintenant je capiche mieux le pourquoi de choses
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é.
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...
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]