hello,

j'ai un souci, qui est simple : les threads Windows ne sont pas bloquant si on apelle 2 fois lock()* dans le même thread, et j'aimeraient qu'ils le soient (c'est le cas des pthread). Bien sur c'est une utilisation abusive du mutex vous allez me dire : alors voilà ce que je veux faire, en pseudo-code et en assumant que 2 lock() consécutives soient bloquantes même dans le même thread, si vous pouvez m'aider à concevoir différement mon programme :

*) par lock() j'entend WaitForSingleObject(*lMutex, INFINITE)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
Mutex mutex;
 
class A {
  static a() {
    ...
    mutex.unlock();}
 
  static b() { // b() NE DOIT PAS S'EXECUTER AVANT a()
    mutex.lock(); // déja lockée : bloquant jusqu'au l'appel de a()
    mutex.unlock(); // le prochain appel de b() ne sera pas bloquant
    ...;} 
}
 
void func {
   ...
   A.a();
   ...
}
 
void main() {
  mutex.lock();
  ...
  new Thread(func);
  ...
  A.b();
}
en gros je ne VEUT PAS qu'une méthode puisse s'éxecuter AVANT une autre : comment faire ? (quelque chose de propre s'il vous plait, pas de while)