Bonjour,
J'ai une application possédant une classe gérant l'accès aux bases de données via les méthodes open(), close(), read() et write() (il y en a d'autres, mais bon.
Je voudrais être sûr que mes threads ne puissent accéder aux bases de données que un par un, pour ce faire, je pensais donc utiliser un Mutex dans ma classe d'accès aux bases; la classe Acces.
Ca me donne un truc comme ça :
Les autres fonctions de ma classe ne touchent pas au mutex.Code:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 static System.Threading.Mutex myMut ; static public System.Threading.Mutex MyMut { get{ if(myMut == null ) myMut=new System.Threading.Mutex(); return myMut; } } public bool open() { bool bRet = false; int iOpenCount = 0; try { try { lock (MyMut) { MyMut.WaitOne(); } } catch(System.Threading.AbandonedMutexException ex) { string s = ex.ToString(); } if (odbcConn.State == ConnectionState.Closed) { odbcConn.Open(); CountOpen++; } bRet = true; } catch (Exception exx) { close(); LastError = exx.Message; bRet = false; Alerte.LancerAlerte(Planning.Variables.myLog, "Base de données :\r\n" + dbName + "\r\n\r\nErreur :\r\n" + exx.Message); } return bRet; } public void close() { CountOpen--; if (odbcReader != null) odbcReader.Close(); if (odbcConn.State == ConnectionState.Open) odbcConn.Close(); try { lock (MyMut) { MyMut.ReleaseMutex(); } } catch (System.Threading.AbandonedMutexException ex) { } }
J'utilise la classe d'accès de nombreuses fois dans mon programme, et elle est donc instanciée de nombreuses fois, mais ça ne change rien du côté de mon Mutex, ce dernier étant static.
Or, quand je lance mon programme, si il accepte de compiler, il me claque dans les pattes dès qu'il y a du multithread, alors que mon mutex est censé gérer ça !!!
Je débute dans le cross multithread, j'ai bien lu la faq et msdn (je n'ai d'ailleurs pas tout compris mais bon) mais je ne comprends pas pourquoi cela ne marche pas,...
Si quelqu'un pouvait me donner des indications, ça m'aiderait beaucoup !