Neotuxxx
Messages postés1Date d'inscriptionmercredi 4 février 2009StatutMembreDernière intervention 2 juillet 2010 2 juil. 2010 à 16:45
Même pour un simple int global les mutex sont nécessaires!
Il suffit de faire un simple test pour s'en rendre contre : par exemple en faisant deux boucle de calcul qui incrémentent un int 50000 fois chacune on ne va pas forcement tomber sur 100000 si l'on n'utilise pas de mutex. Car entre la lecture et la modification si ils sont concurrents il y a un calcul qui aura griller l'autre (en lisant la valeur ils vont tout deux prendre 85412 et au lieu de se retrouver avec 85414 on va avoir 85413!!!).
Au final le problème vient de la modification/lecture de la mémoire et non du calcul!
shuttleur
Messages postés33Date d'inscriptionmercredi 12 septembre 2007StatutMembreDernière intervention30 juin 2008 12 août 2008 à 12:28
Salut à tous
Je comprends tout à fait la nécessité d'utiliser des mutex dans le cas d'un accès concurrent à un tableau par exemple, mais est ce utile si la ressource est un simple entier ?
Y'a t'il un risque de corruption de la ressource lorsqu'elle a une taille élémentaire ?
Merci d'avance
lastpixl
Messages postés56Date d'inscriptionsamedi 28 juin 2003StatutMembreDernière intervention16 février 2006 2 avril 2004 à 21:44
Les sémaphores ont un counter, pas les mutex.
Un mutex peut être propriété d'un thread ou libre. Un sémaphore est un mutex qui peut être possédé par x personnes à la fois, on choisit x a la creation.
+++,
Lastpix'l
xian240482
Messages postés15Date d'inscriptionjeudi 5 février 2004StatutMembreDernière intervention15 juin 2006 9 mars 2004 à 11:29
La difference entre les semaphores et les mutex? aucune!
Les mutex comme les zones critique sont des cas particulier des semaphores. Ils sont plus facile a utilisé c'est tout.
cs_yAAm
Messages postés45Date d'inscriptionsamedi 31 mai 2003StatutMembreDernière intervention22 février 2006 5 mars 2004 à 11:11
Les mutex sont des objet permettant de synchroniser les threads, par exemple pour laisser un acces exclusif a chaque tread qui en est proprietaire ainsi que de booster la priorité de celui-ci et ... si j'ai bien compris, mais alors quelle est la difference avec une semaphore ?????
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 14 févr. 2004 à 12:09
c'est un objet qui permet de limiter l'accès à resource partagée par plusieurs thread :
A semaphore object is a synchronization object that maintains a count between zero and a specified maximum value. The count is decremented each time a thread completes a wait for the semaphore object and incremented each time a thread releases the semaphore. When the count reaches zero, no more threads can successfully wait for the semaphore object state to become signaled. The state of a semaphore is set to signaled when its count is greater than zero, and nonsignaled when its count is zero.
The semaphore object is useful in controlling a shared resource that can support a limited number of users. It acts as a gate that limits the number of threads sharing the resource to a specified maximum number. For example, an application might place a limit on the number of windows that it creates. It uses a semaphore with a maximum count equal to the window limit, decrementing the count whenever a window is created and incrementing it whenever a window is closed. The application specifies the semaphore object in call to one of the wait functions before each window is created. When the count is zero Y indicating that the window limit has been reached Y the wait function blocks execution of the window-creation code.
cs_LordBob
Messages postés2865Date d'inscriptionsamedi 2 novembre 2002StatutMembreDernière intervention11 mai 20099 13 févr. 2004 à 18:23
c'est quoi un semaphore?
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 12 févr. 2004 à 21:24
note quand même que quand tu utilises les en tetes précompilés, ton projet se compile bien plus vite, et c'est très interessant pour les gros projets, ce n'est évidemment pas le cas ici
cs_Arnotic
Messages postés933Date d'inscriptiondimanche 1 avril 2001StatutMembreDernière intervention 9 janvier 2012 12 févr. 2004 à 21:19
Bonjour,
Concernant stdafx.h tu peux le supprimer en créer un projet vide au départ. Et non pas en se servant du code de base fourni par VC. Choisi empty de cette manière du n'aura pas besoin de stdafx.h
2 juil. 2010 à 16:45
Il suffit de faire un simple test pour s'en rendre contre : par exemple en faisant deux boucle de calcul qui incrémentent un int 50000 fois chacune on ne va pas forcement tomber sur 100000 si l'on n'utilise pas de mutex. Car entre la lecture et la modification si ils sont concurrents il y a un calcul qui aura griller l'autre (en lisant la valeur ils vont tout deux prendre 85412 et au lieu de se retrouver avec 85414 on va avoir 85413!!!).
Voici le code utilisé (facile a adapté):
Mutex *mu;
int sum=0;
THR_RTYPE th1(void* param) {
for(int i=0; i<50000; i++) {
//mu->lock();
sum++;
//mu->unlock();
}
return 0;
}
THR_RTYPE th2(void* param) {
for(int i=0; i<50000; i++) {
//while( !mu->tryLock() ){}
sum++;
//mu->unlock();
}
return 0;
}
Au final le problème vient de la modification/lecture de la mémoire et non du calcul!
12 août 2008 à 12:28
Je comprends tout à fait la nécessité d'utiliser des mutex dans le cas d'un accès concurrent à un tableau par exemple, mais est ce utile si la ressource est un simple entier ?
Y'a t'il un risque de corruption de la ressource lorsqu'elle a une taille élémentaire ?
Merci d'avance
2 avril 2004 à 21:44
Un mutex peut être propriété d'un thread ou libre. Un sémaphore est un mutex qui peut être possédé par x personnes à la fois, on choisit x a la creation.
+++,
Lastpix'l
9 mars 2004 à 11:29
Les mutex comme les zones critique sont des cas particulier des semaphores. Ils sont plus facile a utilisé c'est tout.
5 mars 2004 à 11:11
14 févr. 2004 à 12:09
A semaphore object is a synchronization object that maintains a count between zero and a specified maximum value. The count is decremented each time a thread completes a wait for the semaphore object and incremented each time a thread releases the semaphore. When the count reaches zero, no more threads can successfully wait for the semaphore object state to become signaled. The state of a semaphore is set to signaled when its count is greater than zero, and nonsignaled when its count is zero.
The semaphore object is useful in controlling a shared resource that can support a limited number of users. It acts as a gate that limits the number of threads sharing the resource to a specified maximum number. For example, an application might place a limit on the number of windows that it creates. It uses a semaphore with a maximum count equal to the window limit, decrementing the count whenever a window is created and incrementing it whenever a window is closed. The application specifies the semaphore object in call to one of the wait functions before each window is created. When the count is zero Y indicating that the window limit has been reached Y the wait function blocks execution of the window-creation code.
13 févr. 2004 à 18:23
12 févr. 2004 à 21:24
12 févr. 2004 à 21:19
Concernant stdafx.h tu peux le supprimer en créer un projet vide au départ. Et non pas en se servant du code de base fourni par VC. Choisi empty de cette manière du n'aura pas besoin de stdafx.h
Arnotic
Admin CS, MVP Visual C++