这种情况用多线程好还是用守护进程?

hjk_thinking 2011-09-09 11:22:34
要实现的目标如下:
创建一个生产线程,不停的进行生产,数据来了就简单的存储到队列的尾部,然后通知消费线程
创建一个消费线程,这个和生产线程异步(速度尽快),处于阻塞状态,来了信号,就循环从队列头取直到队列为空,就挂起
然后还想创建一个主线程,进行显示信息,然后可以输入控制,暂停,恢复,结束什么的

问题:
生产线程过程函数中有一阻塞函数,我创建生产线程之后sleep,线程马上就退出了,貌似是没执行到阻塞函数,如果用了wait,控制台终端的显示就一直被这个线程占用。如果用守护进程的话又涉及进程通讯问题。


谢谢!
...全文
128 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Athenacle_ 2011-09-16
  • 打赏
  • 举报
回复
多线程。。一个生产者线程,一个消费者线程。

不过我怎么越看越像一个操作系统的作业题啊。。。
hjk_thinking 2011-09-16
  • 打赏
  • 举报
回复
结贴 说一下我自己的解决方法:
因为我的生成线程过程函数里面阻塞函数用到了回调,所以像wangzaiwei2006的这个做法实现起来不太容易
我用的是线程分离,生成和消费都做成分离线程


分不多!!!感谢大家了 ! 没拿到分的童靴请见谅了!
hjk_thinking 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 athenacle_ 的回复:]
多线程。。一个生产者线程,一个消费者线程。

不过我怎么越看越像一个操作系统的作业题啊。。。
[/Quote]
哥哥 真不是作业! 多线程以前没怎么接触 !
giant1st 2011-09-15
  • 打赏
  • 举报
回复
sleep之后线程只是回到blocked状态而已,到了时间就会重新执行,而你的线程sleep之后退出,肯定有问题
半字节 2011-09-11
  • 打赏
  • 举报
回复
看你的说法,
首先 你这个生产者线程,本身也是一个消费者,因为它要等数据来了才进行存储和通知。

为了简化问题,假定你的生产者线程为固定时间间隔进行生产,比如5秒生产一个东西

则你应该这样写
伪代码:
1, 创建生产者线程,消费者线程,控制线程
2,生产者线程入口函数
do{
if(控制退出)
break;
进行生产(比如耗时5秒 sleep(5000));
生产完成要give一个信号量;
}while(1);
3,消费者入口函数
do{
if(控制退出)
break;
take信号量;(take不到会阻塞)
进行消费;
}while(1);
4,控制线程
do{
接受键盘消息;
根据消息执行判断,采取控制
}while(1);
5,对以上3个线程开始调度。

OK了

写的很简陋,见谅
沭水河畔 2011-09-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hjk_thinking 的回复:]

引用 3 楼 zmlovelx 的回复:
好像没有必要用到守护进程.


那用多线程 然后又不让终端被工作线程占用 怎么搞?
[/Quote]
有些阻塞函数可以改为非阻塞或改用其它非阻塞方式,楼主不上代码吗?
hjk_thinking 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zmlovelx 的回复:]
好像没有必要用到守护进程.
[/Quote]

那用多线程 然后又不让终端被工作线程占用 怎么搞?
hjk_thinking 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 feiyinzilgd 的回复:]
守护进程的特点是声明周期在是从开机到关机。

如果你的数据在开机和关机这段时间内一直要出于待命状态,你可以使用守护进程。守护进程实际上就是服务进程。后台运行。
[/Quote]
哦! 那这种要求,有没什么好点的解决方法?
帅得不敢出门 2011-09-09
  • 打赏
  • 举报
回复
好像没有必要用到守护进程.
谭海燕 2011-09-09
  • 打赏
  • 举报
回复
守护进程的特点是声明周期在是从开机到关机。

如果你的数据在开机和关机这段时间内一直要出于待命状态,你可以使用守护进程。守护进程实际上就是服务进程。后台运行。
qq120848369 2011-09-09
  • 打赏
  • 举报
回复
多线程和守护进程有什么联系啊。
jackyjkchen 2011-09-09
  • 打赏
  • 举报
回复
就是普通的多线程程序而已……不要守护进程

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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