vic le viking a écrit :
kadreg: tu dis que le test de la valeur du booleen et son changement de valeur sont sous mutex
j'ai fait ça :
Code :
- while (true)
- mutex.lock()
- if (!fini)
- {
- fini = true;
- //traitement
- mutex.unlock();
- fini = false;
- }
- }
|
mais malgré ça, j'ai toujours 2 mutex qui font le traitement en meme temps. je comprends vraiment pas
|
Il est un peu concon ton code ! Si tu mets "fini" à false après avoir relaché le mutex, faut pas t'étonner si les autres threads entrent dans la boucle également, étant donné que (fini == false) est la condition pour rentrer dans ta boucle.
Voici ce que moi je fais (C#)
Code :
- if (numPost == 999)
- {
- myMutex.WaitOne();
- if (posted == false)
- {
- posted = true;
- myBot.postMessage();
- }
- myMutex.ReleaseMutex();
- }
|
Puis, je remet la variable "posted" à false dans le premier test (numPost < 500).
Je trouve néanmoins ma méthode pourrie :
- Les threads sont bloqués tant que celui qui a le mutex n'a pas posté (c'est pas trop grave, mais bon...)
- "Posted" est initialisé à false tout le temps, tant que le nombre de posts < 500. Le problème est que je vois pas trop ou l'initialiser à part ici
Je sais pas si un mutex est une solution idéale pour ce genre de truc !
kadreg > si tu as une autre méthode à proposer avec les mutex, je suis preneur !
---------------
J'ai un string dans l'array (Paris Hilton)