关于c中多线程的执行顺序等问题
#include<stdio.h>#include<process.h>void aa(void* p1);void bb(void* p2);void cc(void* p3);int main(){ int a[150]; for(int i=0;i<150;++i) a[i]=i; _beginthread(bb,0,a+50); _beginthread(cc,0,a+100); _beginthread(aa,0,a); for(i=0;i<150;++i) printf("%d ",a[i]); printf("\n"); return 0;}void aa(void* p1){ int* p=(int*)p1; int i=0; for(;i<50;++i) p[i]+=1;}void bb(void* p2){ int* p=(int*)p2; int i=0; for(;i<50;++i) p[i]+=2;}void cc(void* p3){ int* p=(int*)p3; int i=0; for(;i<50;++i) p[i]+=3;}HANDLE hThreads[3] = {0};hThreads[0] = _beginthread(bb,0,a+50);hThreads[1] = _beginthread(cc,0,a+100);hThreads[2] = _beginthread(aa,0,a);WaitForMultipleObjects(3,hThreads,TRUE,INFINITE);
[解决办法]
线程只运行一次线程函数就结束了,_beginthread还会自动关闭句柄,所以你无须调用CloseHandle,这点和CreateThread是不一样的,刚才的代码还差个转型。。。。
HANDLE hThreads[3] = {0};hThreads[0] = (HANDLE)_beginthread(bb,0,a+50);hThreads[1] = (HANDLE)_beginthread(cc,0,a+100);hThreads[2] = (HANDLE)_beginthread(aa,0,a);WaitForMultipleObjects(3,hThreads,TRUE,INFINITE);