首页 > 编程语言 > 详细

生成者消费者模式,须在真正的生产者消费者线程中等待

时间:2016-03-07 11:42:21      阅读:226      评论:0      收藏:0      [点我收藏+]

1.生产者线程

while(1){

cvCornerFast();//角点检测

lkOutFrame * frame = new lkOutFrame();//生产一帧

myPyrlk.CaclOpticalFlowPyrLK(...,frame);//调用opencl函数计算光流

}

因为myPyrlk.CaclOpticalFlowPyrLK()中使用的是opencl的回调函数模式,frame的入队操作在回调函数中,所以只会在回调函数中等待。

回调函数属于另一个线程,那么真正的生产者线程并不会阻塞,一直在循环运行,因为速度太快导致生产的frame累积的越来越多,比如累积了1000帧,其实是有1000个回调函数队列在排队执行,同时也导致分配了1000帧的内存,内存需求量一直在剧增。

所以应该在真正的生产者线程中阻塞等待,这样内存便不会一直剧增:

myLkQueue.wait_nofFull();

lkOutFrame * frame = new lkOutFrame();//生产一帧

生成者消费者模式,须在真正的生产者消费者线程中等待

原文:http://www.cnblogs.com/mlj318/p/5249656.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!