小白求教 : LINUX 线程的小问题...

发布于 2022-10-15 04:17:27 字数 1667 浏览 12 评论 0

本帖最后由 hanzhenlll 于 2011-06-15 17:20 编辑

最近在写个东西。。。没怎么用过线程。。。

我的设计师这样的

主线程:
while (1)
{
    printf ("main pthread .........\n");
    do something ........
   
   if (标志位)  //此线程仅在循环第一次中运行......
         pthread_create (....pthread_work....)

// sleep (1);
}

子线程:

pthread_work ()
{
    while (1)
     {
           printf ("Pthread 1 ............");
           do somehing......

           sleep (1);
     }
}

我遇到的情况就是当我主线程 打开 sleep (1)的时候,输出结果为我想要的...
main pthread.....
pthread 1.....
main pthread.....
pthread 1.....
main pthread.....
pthread 1.....

但是当我关闭掉 sleep的时候,结果就不是我想要的了。。。变成了
main pthread....
main pthread....
main pthread....
main pthread....
main pthread....
我以为是线程切换太快,比较难发现后来  > tmp.txt,后发现压根没有运行子线程。。。。

我想问各位这是如何出现了,请帮忙看下 如何解决谢谢!!~~

因我的主线程是 SOCKET服务端, 所以主线程不允许使用Sleep,以免造成TCP阻塞....
另外我对于子线程和主线程的执行优先级没有要求,还请不要在这两个问题上纠结,谢谢大家了!!

------------------->>  谢谢各位关注, vi 出了点小问题。。。。问题已经解决,线程扔在运行,谢谢!!~~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

红玫瑰 2022-10-22 04:17:27

主线程里面pthread_join 子线程啊~~ 等待子线程结束

压抑⊿情绪 2022-10-22 04:17:27

本帖最后由 cokeboL 于 2011-06-15 15:24 编辑

看到下面那行红字。。

爱已欠费 2022-10-22 04:17:27

下次可不可以再醒目一点。。。。

梨涡少年 2022-10-22 04:17:27

回复 2# crazyhadoop

并不是所有的线程都是用 phread_join这个函数的,因为我线程while (1) 意味着他一直在循环,  主线程while (1),意味着 我一直提供socket服务。。。而且我只有1个子线程,并不担心 多线程造成的资源不足问题。。

so... 我认为没必要加, 事实上 加上去后,也没什么意义,因为 join等不到子线程结束....

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文