小白求教 : LINUX 线程的小问题...
本帖最后由 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
主线程里面pthread_join 子线程啊~~ 等待子线程结束
本帖最后由 cokeboL 于 2011-06-15 15:24 编辑
看到下面那行红字。。
下次可不可以再醒目一点。。。。
回复 2# crazyhadoop
并不是所有的线程都是用 phread_join这个函数的,因为我线程while (1) 意味着他一直在循环, 主线程while (1),意味着 我一直提供socket服务。。。而且我只有1个子线程,并不担心 多线程造成的资源不足问题。。
so... 我认为没必要加, 事实上 加上去后,也没什么意义,因为 join等不到子线程结束....