首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于c中多线程的执行顺序等有关问题

2012-06-02 
关于c中多线程的执行顺序等问题C/C++ code#includestdio.h#includeprocess.hvoid aa(void* p1)void b

关于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); 

热点排行