关于c中多线程的执行顺序等问题
- C/C++ code
#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;}一共用三个线程,改变数组元素的值,想问一下main()这个主线程会等待三个线程执行完再执行printf语句吗?如果不是,如何让三个线程执行完再输出?这些线程不用_endthread()结束的话会重复运行吗?刚接触,问题多多,望细解,相关有用知识,多给链接,小弟不甚感激!!
[解决办法]
1、不会
2、不了解你的这种实现方式,不过线程库中应该有类似同步函数。如Posix中可以使用pthread_join
3、不会
[解决办法]
线程创建后就运行了。当然运行的顺序由操作系统进行调度的结果决定了。如果你需要线程间的通信同步,那你就自己搞同步机制来做吧。谷歌一下你就知道的太多了。呵呵...
[解决办法]
[解决办法]
- C/C++ code
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是不一样的,刚才的代码还差个转型。。。。
- C/C++ code
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);