Linux下如何在线程中并发运行两个死循环?
我的代码逻辑是这样的:void*fun1(void*arg){while(1){;}return(void*)0;}void*fun2(void*arg){while(1...
我的代码逻辑是这样的:
void *fun1(void *arg)
{
while(1)
{;}
return (void*)0;
}
void *fun2(void *arg)
{
while(1)
{;}
return (void*)0;
}
int main()
{
pthread_create(&tid1, NULL, fun1, NULL);
pthead_join(tid1, &ret);
pthread_create(&tid2, NULL, fun2, NULL);
pthead_join(tid2, &ret);
}
一些参数和返回值省略。简单说下我的目的:就是要同时运行fun1,fun2,是否有方法实现,以上的实现为什么不可以?如果fun1不退出就永远不会执行到fun2? 展开
void *fun1(void *arg)
{
while(1)
{;}
return (void*)0;
}
void *fun2(void *arg)
{
while(1)
{;}
return (void*)0;
}
int main()
{
pthread_create(&tid1, NULL, fun1, NULL);
pthead_join(tid1, &ret);
pthread_create(&tid2, NULL, fun2, NULL);
pthead_join(tid2, &ret);
}
一些参数和返回值省略。简单说下我的目的:就是要同时运行fun1,fun2,是否有方法实现,以上的实现为什么不可以?如果fun1不退出就永远不会执行到fun2? 展开
展开全部
pthread_join 就是要等待线程退出的。
以上程序的功能是运行一个线程(fun1),然后等待它结束,再运行另一个线程(fun2),继续等待它退出,同时运行的线程最多两个(初始线程和两个fun中的一个)。
同时运行fun1和fun2,只需要把 pthead_join(tid1, &ret); 移到第二个pthread_create后面就可以了。结果是运行fun1线程,然后运行fun2线程,再等待两个线程退出(线程里是死循环,永远等不到退出)。
注意看 pthread_join 的作用,Linux的手册页有详细描述。可以直接把线程设为detached,在线程里调pthread_exit。这样线程结束后,相关资源自动被释放,不用管该什么时候调用 pthread_join。
以上程序的功能是运行一个线程(fun1),然后等待它结束,再运行另一个线程(fun2),继续等待它退出,同时运行的线程最多两个(初始线程和两个fun中的一个)。
同时运行fun1和fun2,只需要把 pthead_join(tid1, &ret); 移到第二个pthread_create后面就可以了。结果是运行fun1线程,然后运行fun2线程,再等待两个线程退出(线程里是死循环,永远等不到退出)。
注意看 pthread_join 的作用,Linux的手册页有详细描述。可以直接把线程设为detached,在线程里调pthread_exit。这样线程结束后,相关资源自动被释放,不用管该什么时候调用 pthread_join。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |