// Simple windows multi-threaded instance, record reference.
#include <stdio.h>#include <stdlib.h>#include <windows.h>typedef struct thread_param{int threadno;char str[20];}T_PARAM;void * myFunc(void *str);int main(int argc,char *argv[]){int i = 0;HANDLEh_thread[2000];T_PARAM*myparas;T_PARAM*mypara;char str[]="test";myparas = (T_PARAM *)malloc(sizeof(T_PARAM)*2000);if(myparas == NULL){printf("Malloc Error!\n");return -1;}memset(myparas,0,sizeof(T_PARAM)*2000);for(i = 0;i<2000;i++){mypara = myparas + i;mypara->threadno = i;strcpy(mypara->str,str);h_thread[i] = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)myFunc,(LPVOID)mypara,0,NULL);if(h_thread[i] == NULL){printf("Thread No[%d] Start Failed!\n",i);return -2;}if(mypara->threadno % 100 == 0){printf("\n\n******************************\n\n");Sleep(2*1000);}printf("ThreadNo [%d] Start Suc!!!\n",mypara->threadno);}for(i = 0;i<2000;i++){WaitForSingleObject(h_thread[i],INFINITE);CloseHandle(h_thread[i]);}free(myparas);printf("Excl Suc!!!\n");return 0;}void * myFunc(void *str){T_PARAM*para=NULL;para = (T_PARAM *)str;return 0;}
Start the thread and record the situation.
For Unix/Linux systems, you only need to change the thread functions corresponding to Windows.