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?
展开
 我来答
rockrush
推荐于2017-11-26 · TA获得超过2092个赞
知道小有建树答主
回答量:1111
采纳率:100%
帮助的人:1023万
展开全部
pthread_join 就是要等待线程退出的。

以上程序的功能是运行一个线程(fun1),然后等待它结束,再运行另一个线程(fun2),继续等待它退出,同时运行的线程最多两个(初始线程和两个fun中的一个)。

同时运行fun1和fun2,只需要把 pthead_join(tid1, &ret); 移到第二个pthread_create后面就可以了。结果是运行fun1线程,然后运行fun2线程,再等待两个线程退出(线程里是死循环,永远等不到退出)。

注意看 pthread_join 的作用,Linux的手册页有详细描述。可以直接把线程设为detached,在线程里调pthread_exit。这样线程结束后,相关资源自动被释放,不用管该什么时候调用 pthread_join。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式