Bonjour,
j'utilise dans un prog une liste chainée où chacun des maillons est alloué avec new, desalloué avec delete.
Mon probleme : si dans le thread n°1 je travaille sur un maillon, et que dans le thread n°2 je détruits ce maillon (en le mettant à NULL apres le delete), je me retrouve dans le thread n°1 avec un maillon non nul, mais détruit, et du coup je ne peux pas faire if(p != NULL)

En gros :

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
 
thread 1 :
csPile.Lock();
info = p->info;
csPile.Unlock();
 
thread 2 :
csPile.Lock();
delete p;
p = NULL;
csPile.Unlock();
 
thread 1 :
csPile.Lock();
if(p != NULL)  //ça passe
info = p->info;  //ça plante
csPile.Lock();
 
 
Merci par avance