文档详情

LabVIEW 图形化编程与实例应用 教学课件 作者 程学庆 等 第11章.ppt

发布:2017-08-16约3.12千字共10页下载文档
文本预览下载声明
LabVIEW图形化编程与实例应用 第11章 LabVIEW的多线程 * 知识点: ? 多线程的基本术语和执行机制 ? 多线程所引发的问题和误区 ? LabVIEW的多线程编程 ? LabVIEW的最大线程数目估计 本章概述: 本章首先介绍了多线程的一些重要概念,例如线程、进程、优先级和安全性等;接着介绍了线程的运行机制包含线程的三种状态和时序调度等;多线程操作非常容易出现错误,普遍存在着优先级倒置和资源耗竭等现象;本章重点介绍了如何在LabVIEW中进行多线程编程,包括LabVIEW的执行子系统、运行队列以及调用DLL等;最后介绍了LabVIEW选择线程数目的一般原则,包括VI程序的最优化等。 LabVIEW图形化编程与实例应用 LabVIEW图形化编程与实例应用 11-1 多线程的基本术语 线程(Thread)的概念是允许程序的一部分独立于其他部分运行。线程是操作系统对象,描述代码在特殊过程中执行的路径。线程实际上有一个执行指针,该指针使Windows可以在任何时候跟踪程序正在运行的行。该指针从程序的顶部开始,在每一行间移动,当遇到判断条件和循环语句时开始分支和循环。当程序不再运行时,该指针位于程序代码之外,相应的程序也有效地终止。 11-1-1 线程 Win32操作系统支持应用程序多线程和16位的Windows相比,这是最能体现Win32优越性的技术,多线程提供了在应用程序中同时执行多个不同类型的线程的手段。 11-1-2 Win32 Win32是抢先式多任务(preemptive multitasking)操作系统,而Window 3.1是协作式多任务(cooperative multitasking)操作系统。 11-1-3 多任务 LabVIEW图形化编程与实例应用 进程依赖于操作系统,它可以简单的定义为一段内存与执行线程的组合体。在计算机内存中保存的每一个程序是以单进程方式运行的,当程序开始时,只要该程序在运行,进程就开始了。 每一个进程和线程都有其相应的优先级,优先级决定了进程或线程相对于其他的进程或线程的重要性。优先级是用数值来表示的,数值越大,优先级越高。进程的优先级是相对于其他的进程而言,而线程的优先级指的是相对于同一进程中的其他线程。 LabVIEW用户可以设置线程的优先级,LabVIEW共分为5个优先级,从低到高依次为:Background、Normal、Above Normal、High和Time Critical。 Windows NT和UNIX操作系统都具有安全属性,因此线程只能在操作系统所限定的安全范围之内使用。 11-1-4 进程 11-1-5 优先级 11-1-6 安全性 LabVIEW图形化编程与实例应用 所有的线程都具有以下一些共同的特性: 线程必须获得CPU周期才可以执行,操作系统的调度程序决定了哪一个线程将获得CPU周期。 所有的线程都具有堆栈,堆栈决定了线程可以获得CPU周期。 11-2-1 线程堆栈 线程有下述3个状态: 运行中(Active) 封锁(Blocked) 挂起(Suspended) 11-2-2 线程调度 11-2 线程机制   操作系统包含两类线程:一类是运行中的线程,另一类是封锁或者挂起的线程。运行中的线程是按照其优先级的顺序按时间排列的,优先级最高的线程被分配一定的CPU运行周期,结束之后交还CPU周期给操作系统,这就是所谓的循环式(round robin)时序调度。 LabVIEW图形化编程与实例应用 11-2-3 上下文切换 “上下文切换”是指在同一进程中,不同线程分时占用CPU周期并且来回进行切换。这种在同一进程中不同线程之间的切换是非常快速的,也可以称为“线程上下文切换”。在操作系统交换线程时,所有的堆栈信息和CPU缓存中的指令都需要从主内存中交换出来。 11-3-1 竞态条件 竞态线程对于程序来说是非常危险的,如果指针变量被卷入到竞态线程中,崩溃和容错机制是近乎相同的。这种问题对于操作系统来说是很难被诊断出的,因为用户根本就不知道各个线程的运行顺序。时序调度算法在发生这种情况时也是无能为力的。 11-3 多线程所带来的问题 11-3-2 优先级倒置 优先级倒置问题发生在两个不同级别的线程同时访问一个资源的情况下。假设现在优先级较低的线程正在访问一个资源,而同时优先级较高的线程被封锁或挂起,当它被解锁后,却由于优先级较低的线程正在访问资源而不得不暂时处于等待状态。 LabVIEW图形化编程与实例应
显示全部
相似文档