如何让线程按指定顺序执行

gxx2019 2009-10-08 08:04:11
有3个线程,A负责接收数据,B负责处理数据,C负责写数据到磁盘。请问用什么样的同步方法,可以让3个线程顺序执行。
即总是A先执行,然后B,然后C。
...全文
176 点赞 收藏 17
写回复
17 条回复
u26zxu 2009年10月20日
同意sevencat看法.队列处理

分析.A B 业务特点. 比如A采集要求的是不连续性,持续性, B处理业务处理时间 C业务处理时间等

进行适当的处理,比如队列长度,是否要用链表,还是加入丢包处理等,

这种分多线程我想适合A接收短时间内要求实时性比较高的情况下用,跟据业务实时性要求建立缓冲

回复 点赞
sevencat 2009年10月18日
我做过一个类似的东东,不过我的效率未必高,我是建立了两个队列,A线程完成后丢队列1,B线程不停的到队列1取东东,取到后进行处理,并再丢到队列2,C线程不停的到队列2取东东执行。我自己觉得这样很清晰。也不太容易出问题。
回复 点赞
danscort2000 2009年10月13日
最简单也是最高效的方法
采用线程消息环
A-B
B-C
C-A
就可以了
回复 点赞
szsmile123 2009年10月13日
A线接收到数据创建B线程,然后B线程在创建C线程,各线程之间的数据传递就很多种了
回复 点赞
wangk 2009年10月13日
我建议你使用Fiber(也就是俗称的纤程),然后配合数据队列自己来调度。
不过逻辑一定要理清楚,否则你会发现,还不如用单线程来实现。
回复 点赞
greatws 2009年10月13日
一个wait一个,不过这样你就失去多线程的意义了,就在一个线程处理好了。
回复 点赞
一条晚起的虫 2009年10月09日
[Quote=引用 6 楼 lisunlin0 的回复:]
如果必须按这样的设计执行的话,一个线程序搞定,不用需要用多线程。

[/Quote]

//同感
回复 点赞
lisunlin0 2009年10月09日
如果必须按这样的设计执行的话,一个线程序搞定,不用需要用多线程。
回复 点赞
ssmartboy 2009年10月09日
学一下线程同步,<<windows核心编程>>上非常清楚
回复 点赞
litomboy 2009年10月09日
学习
回复 点赞
必成桂 2009年10月09日
用event事件就可以了。

创建事件event1, 事件event2

线程B等待event1, 线程A执行完成后通知B执行。

线程C等待event2, B执行完成通知C执行。

回复 点赞
ccc_cgreen 2009年10月09日
严格要求某些线程按照某种顺序执行是几乎不可能的,毕竟,你没有办法预先知道下一个CPU时间片分配给哪个线程,你要实现你的业务逻辑的话,一般都是通过线程同步,来保证A接受到数据之后,然后B再处理,然后C再处理
回复 点赞
ssmartboy 2009年10月09日
[Quote=引用 6 楼 lisunlin0 的回复:]
如果必须按这样的设计执行的话,一个线程序搞定,不用需要用多线程。

[/Quote]
概念错误,可接受若干次,也可以处理若干次,还可以写若干此磁盘,而且他们的次数是可以不等的.所以说多线程是有用武之地的
回复 点赞
wltg2001 2009年10月08日
[Quote=引用楼主 gxx2019 的回复:]
有3个线程,A负责接收数据,B负责处理数据,C负责写数据到磁盘。请问用什么样的同步方法,可以让3个线程顺序执行。
即总是A先执行,然后B,然后C。
[/Quote]
这个不难吧,BC先用WaitForSingleObject等待,A做完了发信号量,让B执行,B完了发信号量让C执行。
回复 点赞
Coder_Y_Jao 2009年10月08日
前一个线程函数返回前CREATEEVENT
回复 点赞
glacier3d 2009年10月08日
说错了,是生产者/消费者模型
回复 点赞
glacier3d 2009年10月08日
应该还是读写者模型,AB之间建立一个读写者模型,BC之间也建立一个,同步用信号量之类
回复 点赞
发动态
发帖子
进程/线程/DLL
创建于2007-09-28

6375

社区成员

4.9w+

社区内容

VC/MFC 进程/线程/DLL
社区公告
暂无公告