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
les 5 threads accedent "normalement" a des données sans interdependance entre eux il ne devrait pas avoir besoin de mutex etc..
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; } }
peut etre le problème est qu'il manque une fonction pour attendre les la fin des threads
merci de me corriger
Partager