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

lej888 2012-05-27 01:54:01

#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()结束的话会重复运行吗?刚接触,问题多多,望细解,相关有用知识,多给链接,小弟不甚感激!!
...全文
405 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
beckhanyan 2012-05-27
  • 打赏
  • 举报
回复
线程只运行一次线程函数就结束了,_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);
beckhanyan 2012-05-27
  • 打赏
  • 举报
回复

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);
AnYidan 2012-05-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

线程创建后就运行了。当然运行的顺序由操作系统进行调度的结果决定了。如果你需要线程间的通信同步,那你就自己搞同步机制来做吧。谷歌一下你就知道的太多了。呵呵...
[/Quote]

++
lej888 2012-05-27
  • 打赏
  • 举报
回复
先行谢过,继续等待
W170532934 2012-05-27
  • 打赏
  • 举报
回复
线程创建后就运行了。当然运行的顺序由操作系统进行调度的结果决定了。如果你需要线程间的通信同步,那你就自己搞同步机制来做吧。谷歌一下你就知道的太多了。呵呵...
sundayX 2012-05-27
  • 打赏
  • 举报
回复
1、不会
2、不了解你的这种实现方式,不过线程库中应该有类似同步函数。如Posix中可以使用pthread_join
3、不会

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧