bonjour le code suivant marche de façon indefinie 2 thread sont executé des fois 3 voir 4 rarement 5
et des fois j'ai des erreurs de segmentation

je debarque en programmation multi-tache
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
28
29
30
31
32
33
34
35
36
37
38
#include <Windows.h>
#include <Winbase.h> 
DWORD WINAPI ThreadProc(LPVOID arg)
{    
   int *myNumber = (int*)arg;
   while(*myNumber < 2000)
		(*myNumber)++;
   ExitThread(NO_ERROR);
 
 return 0;
}
 
int main()
{
	SECURITY_ATTRIBUTES attr;
 
	int gogol[5]={8,6,3,1,4};
	HANDLE h[5]={0};
	attr.nLength = sizeof(SECURITY_ATTRIBUTES);  
    attr.lpSecurityDescriptor = NULL;  
    attr.bInheritHandle = 0;
	DWORD  dwExitCode[5] ={0};
 
	for(unsigned int i=0;i<5;++i)
	{
		h[i]=(HANDLE)CreateThread(&attr,0, ThreadProc ,(LPVOID)&(gogol[i]), 0,0);
	}
	miaw:
	for(unsigned int i=0;i<5;++i)
	{
		GetExitCodeThread(h[i], &dwExitCode[i]);
		if((dwExitCode[0]==NO_ERROR)&&(dwExitCode[1]==NO_ERROR)&&(dwExitCode[2]==NO_ERROR)&&(dwExitCode[3]==NO_ERROR)&&(dwExitCode[4]==NO_ERROR))
			break;
		else
			goto miaw;
	}
 
}
les 5 threads accedent "normalement" a des données sans interdependance entre eux il ne devrait pas avoir besoin de mutex etc..
peut etre le problème est qu'il manque une fonction pour attendre les la fin des threads
merci de me corriger