[thread] comment empécher l'écriture et lecture simultanés ?
Bonjour, voila mon problème, j'ai un programme qui cherche des données dans un fichier et envoi certaines d'entre elles par socket à un autre programme.
Il y a une fonction principale qui lit dans un fichier et place les nouvelles données dans une liste de 100 "places" (une sorte de buffer) et un thread qui lit chaque donnée et les envoi.
Shématisons:
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
|
//ma structure
struct DATA
{
int size;
char data[256];
};
//mon thread
DATA* ldata=(DATA*)param;
while(1)
{
for(int i=0;i<100;i++)
{
while(ldata[i].size==0)
Sleep(1000);
//envoi par socket de ldata[i].data
ldata[i].size=0;
}
}
//et mon main()
DATA* ldata=new data[100];
int compteur=0;
while(on lit les donnée tant qu'il y en a)
{
while(ldata[compteur].size>0)
Sleep(1000);
memcpy(ldata[compteur].data,newdatasize);
ldata[compteur].size=newdatasize;
compteur++;
if (compteur==100)
compteur=0;
} |
Le problème c'est que de temps en temps le thread et le main lise et écrive au même moment ce qui fait buggeur le programme.
Comment devrais je m'y prendre SVP ?
Merci