第3章 LabVIEW与多线程

上传人:hs****ma 文档编号:569698124 上传时间:2024-07-30 格式:PPT 页数:74 大小:1.07MB
返回 下载 相关 举报
第3章 LabVIEW与多线程_第1页
第1页 / 共74页
第3章 LabVIEW与多线程_第2页
第2页 / 共74页
第3章 LabVIEW与多线程_第3页
第3页 / 共74页
第3章 LabVIEW与多线程_第4页
第4页 / 共74页
第3章 LabVIEW与多线程_第5页
第5页 / 共74页
点击查看更多>>
资源描述

《第3章 LabVIEW与多线程》由会员分享,可在线阅读,更多相关《第3章 LabVIEW与多线程(74页珍藏版)》请在金锄头文库上搜索。

1、LabVIEW与多线程Intelligent Electronics InstituteHuazhong University of Science & Technology2目录多线程技术LabVIEW多线程环境LabVIEW多线程程序设计LabVIEW线程通信与同步提示与建议习题33.1多线程技术n基本概念程序程序是指一个静态的指令序列;进程进程为执行程序指令的线程而保留的一系列资源的集合;线程线程是操作系统用来调度执行的最小单位。程序进程线程3.1多线程技术n多线程多线程 在运行一个多线程的程序时,为了运行所有的线程,操作在运行一个多线程的程序时,为了运行所有的线程,操作系统为每个独立线

2、程安排一些系统为每个独立线程安排一些CPUCPU时间,每个线程在使用时间,每个线程在使用完时间片后交出控制权,系统再将完时间片后交出控制权,系统再将CPUCPU时间片分配给下一时间片分配给下一个线程。由于每个时间片足够短,这样就造成一种假象:个线程。由于每个时间片足够短,这样就造成一种假象:好像这些线程在同时运行。好像这些线程在同时运行。 (a) (a) 从用户角度看多线程从用户角度看多线程 (b) (b) 从系统角度看多线程从系统角度看多线程应用多线程技术的目的就是尽可能地利用应用多线程技术的目的就是尽可能地利用CPUCPU时间。时间。43.1多线程技术n多处理器多处理器 多处理器是指在一台

3、计算机中有两个以上的处理器,多处理器是指在一台计算机中有两个以上的处理器,每个处理器可以同时执行不同的线程。每个处理器可以同时执行不同的线程。在多处理器的作用下,多个线程可以同时执行,从在多处理器的作用下,多个线程可以同时执行,从而以更少的时间完成更多的任务。而以更少的时间完成更多的任务。53.1多线程技术n线程调度线程调度无论进程还是线程都是操作系统中进行CPU任务调度的程序单元;CPU调度一个进程时必定发生一个进程上下文切换;CPU调度一个进程内的多个线程时则可以避免上下文切换的发生;采用多线程可以减少因上下文切换导致的CPU时间开销。63.1多线程技术n n在多进程操作系统中,当创建一个

4、进程时系统同时就为进在多进程操作系统中,当创建一个进程时系统同时就为进程创建了一个主线程,由这个主线程生成额外的子线程,程创建了一个主线程,由这个主线程生成额外的子线程,然后这些线程又可以生成更多的子线程,所有的线程共同然后这些线程又可以生成更多的子线程,所有的线程共同构成了一个进程的线程集。构成了一个进程的线程集。73.1多线程技术n线程优先级线程优先级线程被调度的先后顺序是依据线程的优先级来完成的;当一个线程被创建时,操作系统将分配给线程一个优先级;在调度周期的开始,系统从线程的就绪队列中选择拥有最高优先级的线程来执行。83.1多线程技术n影响线程调度的其它因素影响线程调度的其它因素线程调

5、度除了依据线程优先级以外,还受系统调度策略和算法等因素的影响;调度算法的优劣直接影响到CPU运行的效率和性能,不佳的调度算法不仅可能降低系统的反应时间,而且可能导致某些线程或进程长时间得不到调度;目前操作系统一般采用抢占式调度。93.1多线程技术n抢占式调度抢占式调度抢占式调度是指当一个线程或进程所分配的抢占式调度是指当一个线程或进程所分配的时间片过期或有更高优先级的线程或进程出时间片过期或有更高优先级的线程或进程出现时,如果调度进程还需要进行上下文的切现时,如果调度进程还需要进行上下文的切换,操作系统将暂停其在换,操作系统将暂停其在CPUCPU上继续执行,上继续执行,调度另外的线程或进程到调

6、度另外的线程或进程到CPUCPU上执行。上执行。抢占式调度阻止了任何线程长期占用处理器抢占式调度阻止了任何线程长期占用处理器的情况发生;的情况发生;最短任务优先调度策略偏向于预估完成时间最短任务优先调度策略偏向于预估完成时间最短的线程,有利于迅速减少系统中线程数最短的线程,有利于迅速减少系统中线程数量,提高处理器的吞吐量。量,提高处理器的吞吐量。103.1多线程技术n线程通信线程通信如果线程间的通信发生在一个进程中,可以通过从堆栈片段传递值的方式来完成;如果一个进程中的线程同另一个进程中的线程进行通信,则不能以线程通信的方式来处理,而必须以进程间通信来对待,采取如环境变量、命名管道、共享内存等

7、技术手段来解决;在多数情况下,线程通信的代价要小于进程通信的代价。113.1多线程技术n线程同步线程同步线程同步一般分为数据同步、设备同步和任务同步3种情况。数据同步用于保证并发线程以一种安全的模式访问内存块;设备同步用于多个线程访问单一设备时对实时操作和优先权的严格控制,阻止线程破坏设备的状态;任务同步用于加强线程间逻辑关系上的前置条件和后置条件。123.2LabVIEW多线程环境n支持多线程模式的程序设计语言支持多线程模式的程序设计语言用函数直接创建多线程用函数直接创建多线程用函数直接创建多线程用函数直接创建多线程:在:在Visual C+Visual C+语言中,提语言中,提供了封装在供

8、了封装在Win32 APIWin32 API中的中的 CreateThread CreateThread、ExitThreadExitThread等函数方法的等函数方法的CWinThreadCWinThread类,为创建类,为创建多线程应用程序提供了基本框架;多线程应用程序提供了基本框架;从执行系统和从执行系统和数据流控制数据流控制数据流控制数据流控制两个层次实现多线程程序两个层次实现多线程程序设计:设计:LabVIEWLabVIEW开发环境。开发环境。133.2LabVIEW多线程环境nLabVIEW执行系统执行系统类似于Java虚拟机,是特有的中间执行平台。LabVIEW程序框图编译生成的

9、,并不是操作系统平台上的可执行程序代码,而是一种特有的程序组织代码,这种代码必须通过LabVIEW的执行系统来实现在操作系统上的运行;在创建LabVIEW发布的可执行程序时,对于没有LabVIEW执行系统环境的计算机需要在发布组件选项中包含LabVIEW运行引擎(Run-Time Engine)。143.2LabVIEW多线程环境n执行子系统执行子系统(6个个) 用户界面(用户界面(user interfaceuser interface)、标准()、标准(standardstandard)、仪器)、仪器I/OI/O(instrument I/Oinstrument I/O)、数据采集()、数

10、据采集(data acquisitiondata acquisition)、)、其他其他1 1(other 1other 1)、其他)、其他2 2(other 2other 2)。)。 uu在在“ “文件文件VIVI属性属性执行执行” ”面板中可以对执行子系统进行更改。面板中可以对执行子系统进行更改。15注意:“与调用方相同”(same as caller)不是一个子系统,它表示其执行子系统与调用该子VI的程序的执行子系统相同3.2LabVIEW多线程环境n子系统分工子系统分工 对执行系统进行细分的最初目的在于将不同用途的对执行系统进行细分的最初目的在于将不同用途的VIVI严格分配严格分配到不

11、同的执行子系统中,各个执行子系统具体分工如下:到不同的执行子系统中,各个执行子系统具体分工如下:用户界面子系统用户界面子系统用户界面子系统用户界面子系统:主要用于屏幕画图,以及键盘、鼠标输入等,这个子系:主要用于屏幕画图,以及键盘、鼠标输入等,这个子系统也用于特定类型的统也用于特定类型的VIVI执行。执行。标准子系统标准子系统标准子系统标准子系统:如果需要为用户界面保持专用运行时间,应当为:如果需要为用户界面保持专用运行时间,应当为VIVI指定这个指定这个子系统。子系统。仪器仪器仪器仪器I/OI/O子系统子系统子系统子系统:该子系统主要用于完成与:该子系统主要用于完成与VXIVXI系统、系统、

12、GPIBGPIB系统、串行仪系统、串行仪器或网络之间的通信。器或网络之间的通信。数据采集子系统数据采集子系统数据采集子系统数据采集子系统:该子系统主要用于数据采集。:该子系统主要用于数据采集。其他子系统其他子系统其他子系统其他子系统1 1:当程序中的任务需要自己的线程时使用。:当程序中的任务需要自己的线程时使用。其他子系统其他子系统其他子系统其他子系统2 2:当程序中的任务需要自己的线程时使用。:当程序中的任务需要自己的线程时使用。163.2LabVIEW多线程环境n用户界面子系统用户界面子系统用户界面子系统是LabVIEW系统运行时必须加载的,而其他几个执行子系统则是可选的;用户界面子系统实

13、际上是一个单线程系统,只有一个用户界面线程执行各种任务;在LabVIEW中所有与用户界面相关的操作都由用户界面子系统负责,其他执行子系统不负责管理用户界面。173.2LabVIEW多线程环境n线程数量设置线程数量设置无法通过编写程序来实现对无法通过编写程序来实现对LabVIEWLabVIEW执行系统中线执行系统中线程变化的控制,但作为辅助工具,程变化的控制,但作为辅助工具,LabVIEWLabVIEW提供了提供了一个线程配置程序一个线程配置程序threadconfig.vithreadconfig.vi,它位于,它位于LabVIEWLabVIEW安装目录安装目录vi.lib utilities

14、sysinfo.llbvi.lib utilitiessysinfo.llb中;中;一般情况下,不需要修改一般情况下,不需要修改LabVIEWLabVIEW系统环境的默认系统环境的默认线程数量设置。当线程数量设置。当LabVIEWLabVIEW系统运行在一个系统运行在一个专用计专用计专用计专用计算机算机算机算机上,可以根据计算机的硬件配置情况适当增加上,可以根据计算机的硬件配置情况适当增加线程的数量。而在一个线程的数量。而在一个非专用计算机非专用计算机非专用计算机非专用计算机上增加上增加LabVIEWLabVIEW系统中线程的数量,则可能影响其他程序系统中线程的数量,则可能影响其他程序的运行,

15、甚至可能由于线程过多导致计算机整体性的运行,甚至可能由于线程过多导致计算机整体性能的下降。能的下降。183.2LabVIEW多线程环境n线程配置程序线程配置程序threadconfig.vi 线程配置程序界面线程配置程序界面 线程配置对话框线程配置对话框193.2LabVIEW多线程环境nVI优先级优先级 LabVIEWLabVIEW程序优先级的设置方法可以分为程序控制和系统控制程序优先级的设置方法可以分为程序控制和系统控制两种。两种。程序控制方法程序控制方法程序控制方法程序控制方法是指用户通过在程序框图中使用等待函数来控制是指用户通过在程序框图中使用等待函数来控制程序内部并行任务的执行顺序;

16、程序内部并行任务的执行顺序;系统控制方法系统控制方法系统控制方法系统控制方法是通过在是通过在VIVI属性中选择相应的属性中选择相应的VIVI执行优先级别来执行优先级别来控制控制VIVI的执行顺序。的执行顺序。 20任务1,优先级高任务2,优先级低3.2LabVIEW多线程环境n注意注意VI的优先级问题的优先级问题考虑修改VI的优先级设置时要慎重小心,一般情况下,用户创建VI的默认为普通优先级,应尽量避免修改VI的优先级,只有那些特殊的VI才被指定为非普通的优先级;在当一个VI确有必要使用非普通的优先级时,应当遵循这条原则:不要让高优先级的VI持续运行;VI优先级是隐含的,只能通过查询VI属性才

17、能了解。213.2LabVIEW多线程环境n子程序优先级 子程序优先级并不是一个真正的优先级,它并不标子程序优先级并不是一个真正的优先级,它并不标识识VIVI的相对优先级别,仅用来标识一类特殊的的相对优先级别,仅用来标识一类特殊的LabVIEWLabVIEW程序,具有该优先级的程序,具有该优先级的VIVI不会被加入到执不会被加入到执行子系统的运行队列中。行子系统的运行队列中。鲜明的特征:鲜明的特征:VIVI的用户界面不能更新,只能调用子的用户界面不能更新,只能调用子程序优先级的子程序优先级的子VIVI,不能调试等;,不能调试等;子程序优先级的子程序优先级的VIVI可以调用其他子程序优先级的可以

18、调用其他子程序优先级的VIVI,不能调用其他优先级的,不能调用其他优先级的VIVI。223.2LabVIEW多线程环境n子程序优先级子程序优先级当选择了子程序优先级后,以下几个选项就不能选择了:a)a)打开时运行(打开时运行(Run when openedRun when opened););b)b)调用时挂起(调用时挂起(Suspend when calledSuspend when called););c)c)运行时自动处理菜单(运行时自动处理菜单(Auto handling of menus at Auto handling of menus at launchlaunch););d)d

19、)允许调试(允许调试(Allow debuggingAllow debugging););e)e)调用时清除显示控件(调用时清除显示控件(Clear indicators when calledClear indicators when called)。)。233.2LabVIEW多线程环境n子程序优先级子程序优先级VI示例示例 “ “字符串字符串” ”选项板下的选项板下的“ “删除空白删除空白” ”(Trim (Trim Whitespace.vi)Whitespace.vi)243.2LabVIEW多线程环境n多线程程序的优势多线程程序的优势多线程技术在LabVIEW程序中充分发挥了重要的

20、作用,具有以下几点优势:更高效地使用CPU;更好的系统可靠性;更优化的多处理器性能。253.3LabVIEW多线程程序设计n线程优化线程优化示例1: 要求要求要求要求:监控重物的速度变化过程,绘制:监控重物的速度变化过程,绘制S-tS-t(距离(距离时间)曲线、时间)曲线、V-tV-t(速度(速度时间)曲线、时间)曲线、V-SV-S(速度(速度距离)曲线并显示所有距离)曲线并显示所有数据。数据。初始程序分初始程序分初始程序分初始程序分3 3步执行步执行步执行步执行26第一帧:得到S-t数据3.3LabVIEW多线程程序设计n线程优化线程优化27第二帧:得到V-t数据3.3LabVIEW多线程程

21、序设计n线程优化线程优化28第三帧:得到V-S数据3.3LabVIEW多线程程序设计n线程优化线程优化发挥多线程的优势,将程序优化为并行结构发挥多线程的优势,将程序优化为并行结构发挥多线程的优势,将程序优化为并行结构发挥多线程的优势,将程序优化为并行结构29并行结构下的优化程序3.3LabVIEW多线程程序设计n线程优化线程优化示例2: 以一个数据采集程序为例来介绍最大化数据流的编程。以一个数据采集程序为例来介绍最大化数据流的编程。原程序由顺序结构实现原程序由顺序结构实现原程序由顺序结构实现原程序由顺序结构实现30第1帧有两个执行流程:一是产生波形;二是配置模拟输入和输出。3.3LabVIEW

22、多线程程序设计n线程优化线程优化31第2帧的功能是发送波形数据。3.3LabVIEW多线程程序设计n线程优化线程优化32第3帧的功能是采集波形。3.3LabVIEW多线程程序设计n线程优化线程优化33第4帧的功能是停止输入和输出的任务。3.3LabVIEW多线程程序设计n线程优化线程优化线程优化后的程序框图线程优化后的程序框图线程优化后的程序框图线程优化后的程序框图34这个程序是按照配置、产生波形、读取波形的顺序执行的。只有等到前一步骤中错误簇的信息到达后,下一步骤才能执行。输入和输出配置VI函数采用并行结构,并使用合并错误函数来保证只有输入和输出都已经配置好之后才可以产生波形。3.3LabV

23、IEW多线程程序设计n超线程程序超线程程序 无论是超线程计算机还是多处理器计算机,都可以采用超无论是超线程计算机还是多处理器计算机,都可以采用超线程机制对应用程序进行性能优化。线程机制对应用程序进行性能优化。 示例:计算所有大于示例:计算所有大于2 2的质数。的质数。初步想法初步想法初步想法初步想法35单循环解质数程序框图。3.3LabVIEW多线程程序设计n超线程程序超线程程序优化程序优化程序优化程序优化程序36双循环解质数程序框图。3.3LabVIEW多线程程序设计n可重入技术可重入技术 可以在可以在“ “文件文件VIVI属性属性执行执行” ”框中设置框中设置VIVI为可重为可重入入, ,

24、在可重入在可重入VIVI中,每个调用都产生一个副本,有中,每个调用都产生一个副本,有着独自的状态信息,这样在执行时,多个相同的子着独自的状态信息,这样在执行时,多个相同的子VIVI可以同时执行。可以同时执行。可重入执行在以下情况下是很有用的:a)a)VIVI需要等待一个特定的时间或者超时后才执行;需要等待一个特定的时间或者超时后才执行;b)b)VIVI中含有不能与其他实例共享的数据。中含有不能与其他实例共享的数据。373.3LabVIEW多线程程序设计n可重入技术可重入技术示例:设计一个仿真芯片设计一个仿真芯片74LS1474LS14 74LS1474LS14的功能图的功能图 施密特非门的传输

25、特性施密特非门的传输特性383.3LabVIEW多线程程序设计n可重入技术可重入技术芯片芯片74LS1474LS14是由是由6 6个施密特非门构成,因此个施密特非门构成,因此74LS14.vi74LS14.vi同时同时需要调用需要调用6 6个个shimit.vishimit.vi子子VIVI。39shimit.vi的程序框图。3.3LabVIEW多线程程序设计n可重入技术可重入技术4074LS14.vi的程序框图。3.4LabVIEW线程通信与同步n局部变量局部变量局部变量(局部变量(Local VariableLocal Variable)是)是LabVIEWLabVIEW为改善图形为改善图

26、形化编程灵活性而专门设计的特殊节点,主要是解决化编程灵活性而专门设计的特殊节点,主要是解决数据和对象在同一数据和对象在同一VIVI程序中的复用问题。程序中的复用问题。局部变量实际上是程序框图中已经存在的某个对象局部变量实际上是程序框图中已经存在的某个对象的复制品。的复制品。需要某个对象既可读(读出当前值)又可写(写入需要某个对象既可读(读出当前值)又可写(写入更新值)时,就可以使用局部变量。更新值)时,就可以使用局部变量。413.4LabVIEW线程通信与同步n创建局部变量创建局部变量:两种方式第一种方式是在按照第一种方式是在按照“ “函数函数编程编程结构结构局部变局部变量量” ”路径创建,此

27、时局部变量的图标有一个问号,路径创建,此时局部变量的图标有一个问号,需要选择与之相关联的对象后方可使用;需要选择与之相关联的对象后方可使用;第二种方式是选择目标对象的右键快捷菜单中的第二种方式是选择目标对象的右键快捷菜单中的“ “创建创建局部变量局部变量” ”菜单项,放置到背面板的相应位菜单项,放置到背面板的相应位置,这样就直接创建了该对象的局部变量。置,这样就直接创建了该对象的局部变量。423.4LabVIEW线程通信与同步n局部变量有两种状态局部变量有两种状态局部变量有两种状态局部变量有两种状态:读状态和写状态:读状态和写状态读状态相当于控制对象,外观和控制对象的端子相读状态相当于控制对象

28、,外观和控制对象的端子相似,为宽边框;似,为宽边框;写状态相当于显示对象,外观和显示对象相似,为写状态相当于显示对象,外观和显示对象相似,为细边框。细边框。n局部变量最常用于两种情况局部变量最常用于两种情况局部变量最常用于两种情况局部变量最常用于两种情况:并行循环控制:并行循环控制和对变量数值的更新和对变量数值的更新并行循环控制主要用于用一个变量同时控制几个并并行循环控制主要用于用一个变量同时控制几个并行行WhileWhile循环的情况;循环的情况;变量数值的更新是指在程序运行时,同一个对象既变量数值的更新是指在程序运行时,同一个对象既可作为输入给程序赋值,也可作为输出显示当前状可作为输入给程

29、序赋值,也可作为输出显示当前状态。态。433.4LabVIEW线程通信与同步n全局变量全局变量如果要在几个如果要在几个VIVI间共享数据,局部变量无法解决,间共享数据,局部变量无法解决,需要使用全局变量(需要使用全局变量(Global VariableGlobal Variable)来实现;)来实现;全局变量的创建方法为:按照全局变量的创建方法为:按照“ “函数函数编程编程结构结构全局变量全局变量” ”路径创建,在程序框图中会生成一个路径创建,在程序框图中会生成一个“ “? ?” ”端子,这表示该变量尚未定义,该端子上有端子,这表示该变量尚未定义,该端子上有一个地球图标,双击未定义的全局变量端

30、子,或用一个地球图标,双击未定义的全局变量端子,或用右键快捷菜单中的右键快捷菜单中的“ “打开前面板打开前面板” ”命令可打开一个命令可打开一个全局变量前面板,它用于定义全局变量的内容。全局变量前面板,它用于定义全局变量的内容。443.4LabVIEW线程通信与同步n全局变量应用示例:全局变量应用示例:测速系统全局变量前面板看上去和普通全局变量前面板看上去和普通VIVI的前面板相似,但没有背面板。的前面板相似,但没有背面板。工具栏中也没有运行和调试的相关工具图标。工具栏中也没有运行和调试的相关工具图标。45全局变量前面板。3.4LabVIEW线程通信与同步测距仪器初始化程序测距仪器初始化程序4

31、63.4LabVIEW线程通信与同步测距仪器测试程序测距仪器测试程序473.4LabVIEW线程通信与同步n事件发生事件发生事件发生(事件发生(OccurrenceOccurrence)技术可以用来在)技术可以用来在VIVI或部分或部分框图程序之间传递触发时间,利用事件发生技术可框图程序之间传递触发时间,利用事件发生技术可以避免轮询带来的系统资源浪费以避免轮询带来的系统资源浪费; ;对于一般的应用来说,用户应从调用对于一般的应用来说,用户应从调用“ “产生事件发产生事件发生生” ”函数开始来创建事件发生参数值,该参数值必函数开始来创建事件发生参数值,该参数值必须要传递到所有其他事件操作中。然后

32、,用户既可须要传递到所有其他事件操作中。然后,用户既可以通过调用以通过调用“ “等待事件发生等待事件发生” ”函数来发生,也可以函数来发生,也可以通过设置事件功能来创建一个事件的发生。在通过设置事件功能来创建一个事件的发生。在LabVIEWLabVIEW环境中,可以有多重的环境中,可以有多重的“ “等待事件发生等待事件发生” ”函数节点存在,然后当与之联系的设置事件功能被函数节点存在,然后当与之联系的设置事件功能被调用时,所有的事件都会在同一时间触发。调用时,所有的事件都会在同一时间触发。483.4LabVIEW线程通信与同步n事件发生示例事件发生示例事件发生测试程序前面板事件发生测试程序前面

33、板事件发生测试程序前面板事件发生测试程序前面板493.4LabVIEW线程通信与同步事件发生的测试程序框图事件发生的测试程序框图事件发生的测试程序框图事件发生的测试程序框图503.4LabVIEW线程通信与同步事件发生用户子事件发生用户子事件发生用户子事件发生用户子VIVI的程序框图的程序框图的程序框图的程序框图513.4LabVIEW线程通信与同步n通知通知通知(通知(NotificationNotification)技术通常用于两个相互独立的框图程)技术通常用于两个相互独立的框图程序之间或同一台计算机中两个不同序之间或同一台计算机中两个不同VIVI之间的同步通信;之间的同步通信;通知器(通

34、知器(NotifierNotifier)是基于通知技术的通信工具,可以看)是基于通知技术的通信工具,可以看做数据之间的邮箱,一部分框图程序向邮箱中发送数据,做数据之间的邮箱,一部分框图程序向邮箱中发送数据,另一部分框图程序从这个邮箱中收取数据;另一部分框图程序从这个邮箱中收取数据;对于通知器,在没有通知消息发生时,程序框图处于等待对于通知器,在没有通知消息发生时,程序框图处于等待状态,避免了无休止地循环检测,从而减少了计算机时间状态,避免了无休止地循环检测,从而减少了计算机时间的浪费;的浪费;通知技术不能用于网络或通知技术不能用于网络或VI ServersVI Servers之间的通信。之间的

35、通信。523.4LabVIEW线程通信与同步n通知流程通知流程从调用“获取通知器引用”(Obtain Notifier)函数来开始创建通知参数值,使用该函数时必须输入元素的数据类型;通过“发送通知”(Send Notifier)发送信息;接收方通过“等待通知”(Wait on Notifier)得到发送的信息。533.4LabVIEW线程通信与同步n通知器示例通知器示例NotificationNotification测试程序前面板测试程序前面板测试程序前面板测试程序前面板543.4LabVIEW线程通信与同步通知测试程序框图通知测试程序框图通知测试程序框图通知测试程序框图553.4LabVIE

36、W线程通信与同步通知用户子通知用户子通知用户子通知用户子VIVI的程序框图的程序框图的程序框图的程序框图563.4LabVIEW线程通信与同步n通知的优缺点通知的优缺点通知和事件发生有些类似,不需要使用轮询技术,通知和事件发生有些类似,不需要使用轮询技术,减少了系统开销;减少了系统开销;通知相比事件发生机制有一定的优势:事件发生不通知相比事件发生机制有一定的优势:事件发生不能传递数据,只能触发事件,而通知不仅可以传递能传递数据,只能触发事件,而通知不仅可以传递数据,还可以通过数据,还可以通过“ “取消通知取消通知” ”函数删除信息;函数删除信息;通知也有一些不足:没有数据队列,有时会丢失一通知

37、也有一些不足:没有数据队列,有时会丢失一些事件,因为新的事件会覆盖旧的没有响应的事件。些事件,因为新的事件会覆盖旧的没有响应的事件。573.4LabVIEW线程通信与同步n队列队列队列(队列(QueueQueue)结构是一种先进先出()结构是一种先进先出(FIFOFIFO)的结)的结构;构;用队列技术,可以将一个有序的消息(或数据)从用队列技术,可以将一个有序的消息(或数据)从一个程序中传递到另一个与之相独立的并行运行的一个程序中传递到另一个与之相独立的并行运行的程序中;程序中;队列技术把数据发送到一个队列缓存中,如果没有队列技术把数据发送到一个队列缓存中,如果没有程序将这些数据读出,这些数据

38、将一直保存在队列程序将这些数据读出,这些数据将一直保存在队列缓存中,直到有一个程序将其读出并删除;缓存中,直到有一个程序将其读出并删除;如果有两个应用程序都在等待同一个队列中的同一如果有两个应用程序都在等待同一个队列中的同一条数据,只有那个动作快的程序会收到数据,动作条数据,只有那个动作快的程序会收到数据,动作慢的则不会收到预期的数据,因为这条数据已经被慢的则不会收到预期的数据,因为这条数据已经被动作快的程序读出并删除了。动作快的程序读出并删除了。583.4LabVIEW线程通信与同步n队列的应用示例队列的应用示例QueueQueue测试程序前面板测试程序前面板测试程序前面板测试程序前面板59

39、3.4LabVIEW线程通信与同步队列测试程序框图队列测试程序框图队列测试程序框图队列测试程序框图603.4LabVIEW线程通信与同步队列用户子队列用户子队列用户子队列用户子VIVI的程序框图的程序框图的程序框图的程序框图613.4LabVIEW线程通信与同步n信号量信号量信号量(信号量(SemaphoreSemaphore)技术可以用于限制同时访问)技术可以用于限制同时访问一个被保护的共享资源的任务数目;一个被保护的共享资源的任务数目;通过一个公用的信号量,可以在某一时刻仅允许一通过一个公用的信号量,可以在某一时刻仅允许一个任务执行一个受保护的临界区代码;个任务执行一个受保护的临界区代码;

40、信号量和其他同步机制是不同的,其他机制主要是信号量和其他同步机制是不同的,其他机制主要是唤醒一个等待任务,信号量则是告诉任务需要等待唤醒一个等待任务,信号量则是告诉任务需要等待其他任务允许其执行时才执行,所以能够有效地保其他任务允许其执行时才执行,所以能够有效地保护公有资源。护公有资源。623.4LabVIEW线程通信与同步n信号量的应用示例信号量的应用示例信号量测试程序前面板信号量测试程序前面板信号量测试程序前面板信号量测试程序前面板633.4LabVIEW线程通信与同步信号量测试程序框图信号量测试程序框图信号量测试程序框图信号量测试程序框图643.4LabVIEW线程通信与同步信号量用户子

41、信号量用户子信号量用户子信号量用户子VIVI的程序框图的程序框图的程序框图的程序框图653.4LabVIEW线程通信与同步n集合点集合点集合点(集合点(RendezvousRendezvous)技术可以使若干并行的任)技术可以使若干并行的任务同步执行;务同步执行;只有所有的任务到达后,才开始同步执行,就好比只有所有的任务到达后,才开始同步执行,就好比一个会议,只有等到参会人员到齐后才开始。一个会议,只有等到参会人员到齐后才开始。663.4LabVIEW线程通信与同步n集合点的应用示例集合点的应用示例集合点测试程序前面板集合点测试程序前面板集合点测试程序前面板集合点测试程序前面板67683.4L

42、abVIEW线程通信与同步集合点测试程序框图集合点测试程序框图集合点测试程序框图集合点测试程序框图3.4LabVIEW线程通信与同步集合点用户子集合点用户子集合点用户子集合点用户子VIVI的程序框图的程序框图的程序框图的程序框图693.5提示与建议n n多线程应用程序有很多优势,如提高执行效率、获取更多多线程应用程序有很多优势,如提高执行效率、获取更多有效有效CPUCPU使用时间等,在使用时间等,在LabVIEWLabVIEW中,写多线程程序及配置中,写多线程程序及配置线程的优先级是相当容易的。线程的优先级是相当容易的。n n在有些情况下,使用多线程反而会降低执行效率,在以下在有些情况下,使用

43、多线程反而会降低执行效率,在以下情况中应该避免使用多线程:情况中应该避免使用多线程:应用程序的运行步骤有先后顺序;应用程序的运行步骤有先后顺序;应用程序有过多的线程切换;应用程序有过多的线程切换;高优先级的线程导致其他线程饥饿;高优先级的线程导致其他线程饥饿;在系统中只有有限的资源可以利用;在系统中只有有限的资源可以利用;过多使用没有安全保护线程的过多使用没有安全保护线程的CINCIN和和DLLDLL;大部分任务都访问用户界面线程;大部分任务都访问用户界面线程;死锁线程需要共享数据。死锁线程需要共享数据。703.6习题1.1.简述局部变量、全局变量、事件发生、通知、队列、信号量简述局部变量、全

44、局变量、事件发生、通知、队列、信号量及集合点之间的异同点。及集合点之间的异同点。2.2.在一个在一个VIVI中有两个中有两个WhileWhile循环,如何实现只用一个循环,如何实现只用一个StopStop控件控控件控制制WhileWhile循环的停止?如下图所示。考虑使用局部变量、全局循环的停止?如下图所示。考虑使用局部变量、全局变量、队列、通知等方法。变量、队列、通知等方法。713.6习题3.3.在一个在一个VIVI中,含有一个中,含有一个WhileWhile循环,循环中有一个子循环,循环中有一个子VIVI,子,子VIVI也是一个也是一个WhileWhile循环,如何使用一个循环,如何使用一

45、个StopStop控件使主控件使主VIVI和子和子VIVI同同时停止?如下图所示。考虑使用全局变量、队列、通知等方时停止?如下图所示。考虑使用全局变量、队列、通知等方法,另外是否可以使用局部变量来实现,为什么?法,另外是否可以使用局部变量来实现,为什么? (a) (a) 主程序主程序 (b) (b) 子程序子程序723.6习题4.4.打开和运行习题中第打开和运行习题中第3 3章目录下或者章目录下或者LabVIEW ExampleLabVIEW Example中的中的Timed loops in reentrant VIs Test.viTimed loops in reentrant VIs Test.vi,前面板如图所示。,前面板如图所示。 (1 1)为什么第)为什么第2 2部分的部分的White PlotWhite Plot会报错?会报错? (2 2)如果将)如果将Reentrant SubVI.viReentrant SubVI.vi这个子这个子VIVI设置为不可重入,将设置为不可重入,将会出现什么问题?会出现什么问题? (3 3)在程序中队列所起的作用是什么?)在程序中队列所起的作用是什么?73

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 模板/表格 > 财务表格

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号