LabVIEW之生产者/消费者模式--队列操作 彭会锋

LabVIEW之生产者/消费者模式--队列操作

彭会锋

本文章主要是对学习LabVIEW之生产者/消费者模式的学习笔记,其中涉及到同步控制技术-队列、事件、状态机、生产者-消费者模式,这几种技术在在本章中都会有侧重点的进行介绍和总结!


  • 队列同步技术-操作函数

同步控制技术可以实现在多个VI之间或者同一VI 不同县城之间同步任务和交换数据;在LabVIEW中提供了‘同步’函数选板,包括通知器、队列、信号量、集合点、事件、首次调用函数,本文主要关注同步控制技术之队列技术:

队列操作函数:

1 “获取队列引用”函数

2 "元素入队列" 和 “元素出队列” 函数

函数作用:将元素入队列和出队列用(没什么好说的!)
超时毫秒(-1)端子:如果未连接,默认输入值为-1,表示永不超时,如果队列满,则一直等待直到队列有空位为止;                如果连接端子,则新元素等待设定时间后仍无法入队列,则结束本次等待!

3 “最前端插入元素” 和 “有损耗元素入队列” 函数

函数作用:将元素插入队列,不过插入队列方式有区别;
元素入队列、最前端插入元素、有损耗元素入队列三者区别:”元素入队列“函数采用先入后出次序,而“最前端插入元素”函数则采用后入先出(FIFO)的原则,类似于堆栈,因此可以使用队列实现堆栈效果,相比数组实现有优势;“元素入队列”函数如果队列满,则线程等待,直到有空位为止;“有损耗元素入队列”在这种情况下则会自动删除队列前端元素,并在末端插入元素,可以用于实现缓冲区效果;

4 “预览队列元素”函数

预览队列元素和元素出队列区别:当返回队列前段的元素时,是否删除该元素!

5 “获取队列状态”函数:主要用于判定队列引用是否有效!

6 “清空队列”和“释放队列引用”函数

“清空队列”函数:清楚队列所有元素,并以数组形式返回元素,用于一次全部读取队列元素;

  • 队列课后练习

1 基于队列的数据采集系统

在此程序设计中学习到的知识:
1 数据类型和采用显示控件的关系:此队列的数据类型为一维数组,所以在元素出队列时的元素也为一维数组,因此要采用波形图空间;
2 子程序VI中设置了“等待函数”,但是没有while循环,将子VI放入while循环中,相当于在while循环中添加了“等待函数”,其实对其的理解可以从c语言中加深理解;3 while循环中停止条件的处理:对于入队列循环,停止只意味着本循环停止,但并不意味着整个程序停止运行了,因为还有两个循环在运行;对于元素出队列循环,当元素空的时候会发生超时错误,进而停止本循环;在元素出队列循环停止后会销毁队列引用,从而导致获取队列状态循环出错,进而停止循环。具体结果如下:

2 队列传递数据练习

此程序学到的知识:
1 队列数据类型设置为常量,所以用于数据显示的控件为波形图控件;2 注释的箭头设置:函数->编程->结构->修饰

3 多数据源输入队列程序

此程序学习知识点:
1 对于队列的创建:通过队列创建函数的名字搜索该引用,如果没有则创建,如果有,则直接加入队列2 此程序采用三个while循环创建三个线程,并将数据同时加入一个队列中,并最终进行显示3 注意此程序中对while循环的停止条件的处理;
时间: 2024-08-05 17:20:28

LabVIEW之生产者/消费者模式--队列操作 彭会锋的相关文章

阻塞队列和生产者-消费者模式

阻塞队列提供了可阻塞的put和take方法.如果队列满了put将阻塞到有空间可用,如果队列为空,take将阻塞到有元素可用.队列可以是有界和无界的,无界的队列put将不会阻塞. 阻塞队列支持生产者消费者模式,该模式将找出需要完成的工作,和执行工作分开.生产者-消费者模式能简化开发过程,因为消除了生产者和消费者之间的代码依赖性,此外,该模式还将生产数据的过程和使用数据的过程解耦开来. 在基于阻塞队列构建的生产者-消费者设计中个,当数据生成时,生产者把数据放入队列,当消费者处理数据时,将从队列中获取

Java 并发编程(四)阻塞队列和生产者-消费者模式

阻塞队列 阻塞队列提供了可阻塞的 put 和 take 方法,以及支持定时的 offer 和 poll 方法.如果队列已经满了,那么put方法将阻塞直到有空间可以用:如果队列为空,那么take方法将一直阻塞直到有元素可用.队列可以使有界的,也可以是无界的,无界队列永远都不会充满,因此无界队列上的put方法永远不会阻塞.一种常见的阻塞生产者-消费者模式就是线程池与工作队列的组合,在 Executor 任务执行框架中就体现了这种模式. 意义:该模式能简化开发过程,因为他消除了生产者和消费者类之间的代

环形缓冲区的设计及其在生产者消费者模式下的使用(并发有锁环形队列)

1.环形缓冲区 缓冲区的好处,就是空间换时间和协调快慢线程.缓冲区可以用很多设计法,这里说一下环形缓冲区的几种设计方案,可以看成是几种环形缓冲区的模式.设计环形缓冲区涉及到几个点,一是超出缓冲区大小的的索引如何处理,二是如何表示缓冲区满和缓冲区空,三是如何入队.出队,四是缓冲区中数据长度如何计算. ps.规定以下所有方案,在缓冲区满时不可再写入数据,缓冲区空时不能读数据 1.1.常规数组环形缓冲区 设缓冲区大小为N,队头out,队尾in,out.in均是下标表示: 初始时,in=out=0 队头

Java并发(基础知识)—— 阻塞队列和生产者消费者模式

1.阻塞队列 BlockingQueue是线程安全的Queue版本,从它的名字就可以看出,它是一个支持阻塞的Queue实现:当向空BlockingQueue请求数据时,它会阻塞至BlockingQueue非空:当向一个已满BlockingQueue插入数据时,线程会阻塞至BlockingQueue可插入. BlockingQueue 的方法以四种形式出现,对于不能立即满足但可能在将来某一时刻可以满足的操作,这四种形式的处理方式不同:第一种是抛出一个异常,第二种是返回一个特殊值(null 或 fa

10 阻塞队列 & 生产者-消费者模式

原文:http://www.cnblogs.com/dolphin0520/p/3932906.html 在前面我们接触的队列都是非阻塞队列,比如PriorityQueue.LinkedList(LinkedList是双向链表,它实现了Dequeue接口). 使用非阻塞队列的时候有一个很大问题就是:它不会对当前线程产生阻塞,那么在面对类似消费者-生产者的模型时,就必须额外地实现同步策略以及线程间唤醒策略,这个实现起来就非常麻烦.但是有了阻塞队列就不一样了,它会对当前线程产生阻塞,比如一个线程从一

阻塞队列和生产者-消费者模式、DelayQueue

1.ArrayDeque, (数组双端队列) 2.PriorityQueue, (优先级队列) 3.ConcurrentLinkedQueue, (基于链表的并发队列) 4.DelayQueue,                                         (延期阻塞队列)(阻塞队列实现了BlockingQueue接口) 5.ArrayBlockingQueue,           (基于数组的并发阻塞队列) 6.LinkedBlockingQueue,        (基

同步对象 队列 生产者消费者模式

多线程 同步对象 解决什么问题? 想要指定的一个线程先执行,再去执行其他线程 精华如下 #event = threading.Event() # event.isSet():返回event的状态值: # # event.wait():如果 event.isSet()==False将阻塞线程: # # event.set(): 设置event的状态值为True,所有阻塞池的线程激活进入就绪状态, 等待操作系统调度: # # event.clear():恢复event的状态值为False. impo

并发编程—— 阻塞队列和生产者-消费者模式

Java并发编程实践 目录 并发编程—— ConcurrentHashMap 并发编程—— 阻塞队列和生产者-消费者模式 概述 第1部分 为什么要使用生产者和消费者模式 第2部分 什么是生产者消费者模式 第3部分 代码示例 第1部分 为什么要使用生产者和消费者模式 在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程.在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据.同样的道理,如果消费者的处理能力大于生产者,那么消费

生产者消费者模式(转)

本文转载自博文系列架构设计:生产者/消费者模式.文中对原文格式进行了稍加整理. 概述 今天打算来介绍一下“生产者/消费者模式”,这玩意儿在很多开发领域都能派上用场.由于该模式很重要,打算分几个帖子来介绍.今天这个帖子先来扫盲一把.如果你对这个模式已经比较了解,请跳过本扫盲帖,直接看下一个帖子(关于该模式的具体应用) . 看到这里,可能有同学心中犯嘀咕了:在四人帮(GOF)的23种模式里面似乎没听说过这种嘛!其实GOF那经典的23种模式主要是基于OO的(从书名<Design Patterns: E