Build-In Step Types的最后一篇,前面两篇的连接如下:

TestStand 基础知识[7] Build-In StepTypes(2)

TestStand 基础知识[6] Build-In StepTypes(1)

按照惯例先贴下Build-In Step Types图

本文主要介绍Synchronization Steps 同步步骤  ,下面所举例子的路径:C:\Users\Public\Documents\National Instruments\TestStand 2012\Examples\Synchronization

恰当使用同步步骤,能让你在多线程编程中,游刃有余,一切皆有可能。

常用的几个步骤展开介绍一下。

首先我们思考一个问题,这些同步的步骤主要作用是什么,应用于什么场景?

在TestStand中,当出现Multi-Thread或者是Multi-Execution,我们可能需要在不同线程之间通讯、等待、同步、互锁等操作,这时同步步骤就可以登场了。

1. LocK  锁

当出现一组步骤都需要互锁的场景,就可以使用。

使用Lock 锁的步骤 (1)创建Lock(2)开始Lock(3)结束Lock

在Lock和UnLock之间的步骤,同一时间只有一个线程在执行,当A线程在执行被锁步骤时,其他线程如果也要进入执行的话,需要在 Lock "Lock 1" 步骤等待,直到A线程释放这个锁为止,其他线程才可以执行被锁步骤。

当多个线程同时到达被锁步骤时,哪个线程先执行是操作系统决定的,没有固定顺序。

另一种场景:当我们只需要互锁一个步骤,可以是用Step Properties->Synchronization设置,如下图

2. Semaphore 信号量

功能类似Lock, 但是在创建信号量的时候,设置初始化信号量数。如下图

我们设置2,也就是说同一时间,允许两个线程执行,其他线程将等待。从下面的效果图也比较容易理解。

3. Rendezvous 集合点

集合点的工作过程是这样的:

假设有4个线程,首先创建集合点,并且设置需要使用集合点线程的数量,也是设置为4。达到的效果是:只有4个线程都到达集合点时,所有的线程才可以继续执行,否则将都会在集合点等待。

上图可以看到,第三个线程没有到集合点,所有其他三个线程都需要等待。

这个集合点的功能看似比较强大,尤其是在Batch模式下。但是在Parallel模式下,有弊端,当生产过程中,由于某个原因,需要禁用掉其中的一个或者多个线程,那么这个时候,需要手动更改集合点数量设置。否则测试会在集合点等待,无法正常测试。

4.Queue 队列

使用队列步骤在线程之间同步数据的生产和消费。遵守先进先出的原则。使用过LabVIEW的生产者和消费者模式的,基本都熟悉了。

可能使用的场景:在A线程中通过硬件采集数据,使用队列传递给线程B,在B线程中,从队列中接收数据和处理数据,最后反馈结果。这样做起到一个异步的效果。避免数据应来不及实时处理,而产生丢失的情况,同时又提高了效率。

5. Notification 通知

也是不同的线程之间实现同步的一种jias方式:

如下第一张图,线程一还没有给线程二发送通知,所以线程二需要等待通知。

第二张图,当线程一给线程二发送通知时,线程二就可以继续执行。

应用场景:当主线程需要拿到子线程结果后才能继续执行的时候,可以使用Notification。

6.Wait 等待

这个步骤,是小伙伴们使用频率最高的同步步骤。

下面的例子,等待2S,这个应该再熟悉不过了

下面几个选项大家估计使用频率不高

Time Multiple : 等待内部时钟的整数倍,功能有点类似LabVIEW中的 Wait Until Next ms Multiple 函数

Thread  : 等待指定线程执行完,继续执行下面的步骤

Execution :等待指定Execution执行完,继续执行下面的步骤

后面两个选项,在多线程编程中,也是比较常用的。

总结:

上面所有的例子和场景都不是唯一的,也可以根据自己的实际场景,灵活应用同步步骤。

假如编写复杂Sequence时,比如自定义Process Model时,上面的这些同步步骤,使用频率可能就会很高。

在平时的编程中可以尝试使用其中的步骤,加深理解,从而灵活应用。

TTStand 基础知识[8] Build-In StepTypes(3)的更多相关文章

  1. Python开发【第二篇】:Python基础知识

    Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...

  2. IOS开发基础知识--碎片33

    1:AFNetworking状态栏网络请求效果 直接在AppDelegate里面didFinishLaunchingWithOptions进行设置 [[AFNetworkActivityIndicat ...

  3. Unity3D基础知识梳理

    这段时间在做Unity的项目,这差不多是我的第一次实战啊~然后公司来了实习的童鞋要学Unity,但是我一向不靠谱啊,所以只能帮他们稍微梳理下基础的东西了啊,唉~学长只能帮你们到这里了~顺便就把自己这两 ...

  4. Ant学习-001-ant 基础知识及windows环境配置

    一.Ant 概要基础知识 Apache Ant 是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发,用以构建应用,或结合其他开源测试工具例如 git.T ...

  5. JVM基础知识(1)-JVM内存区域与内存溢出

    JVM基础知识(1)-JVM内存区域与内存溢出 0. 目录 什么是JVM 运行时数据区域 HotSpot虚拟机对象探秘 OutOfMemoryError异常 1. 什么是JVM 1.1. 什么是JVM ...

  6. MongoDB基础知识 01

    MongoDB基础知识  1. 文档  文档是MongoDB中的数据的基本单元,类似于关系型数据库管理系统的行. 文档是键值对的一个有序集.通常包含一个或者多个键值对. 例如: {”greeting& ...

  7. MyBatis:学习笔记(1)——基础知识

    MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...

  8. Golang 入门系列(三)Go语言基础知识汇总

    前面已经了 Go 环境的配置和初学Go时,容易遇到的坑,大家可以请查看前面的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html ...

  9. Java基础知识➣环境搭建与类型整理(一)

    概述 公司业务需要,产品既要有.NET又需要Java,没得选择,只能业余时间学习Java,整体觉得Java也.NET还是很相似的,只是语法有差别,差别也不是很大,这就将学习Java的基础知识整理下,以 ...

随机推荐

  1. JVM之对象

    几乎所有对象都是在堆中分配内存的,这次来讲讲java的对象. 对象的创建主要分为以下几步: 首先,查看类是否装载.当JVM读取到new指令的时候,会拿着符号描述去方法区寻找它所属的类,如果未查找到,则 ...

  2. Django框架之数据库ORM框架

    首先,我来介绍一下什么是ORM框架: O是object,也就类对象的意思,R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思,M是mapping,是映射的意思.在ORM框架中,它帮 ...

  3. 《C++Primer》第五版习题详细答案--目录

    作者:cosefy ps: 答案是个人学习过程的记录,仅作参考. <C++Primer>第五版习题答案目录 第一章:引用 第二章:变量和基本类型 第三章:字符串,向量和数组 第四章:表达式

  4. ECOS问题解决记录

    1.finder自定义列 http://club.ec-os.net/doc/ecos/framework-ecos/advance/desktop/dev.html#id5 2.命令行工具 地址 h ...

  5. css写斜角

    项目开发中遇到了这样的效果,百度了一波,可以使用css3的伪类实现: /*斜角公用*/1.外层的div加class='wrapper' 并需要设置相对定位 .wrapper:before { -moz ...

  6. 切蛋糕(贪心 or 优先队列)

    链接:https://www.nowcoder.com/acm/contest/80/D来源:牛客网 最可爱的applese生日啦,他准备了许多个质量不同的蛋糕,想请一些同学来参加他的派对为他庆生,为 ...

  7. 01-web自动化基础篇

    1.搭建环境 需要的环境 浏览器(Firefox/Chrome/IE…)-----选择Chrome Python Selenium Selenium IDE(如果用Firefox) FireBug.F ...

  8. 【原创】Dubbo 2.7.5在线程模型上的优化

    这是why技术的第30篇原创文章 这可能是全网第一篇解析Dubbo 2.7.5里程碑版本中的改进点之一:客户端线程模型优化的文章. 先劝退:文本共计8190字,54张图.阅读之前需要对Dubbo相关知 ...

  9. 【译】如何使用Vue过渡效果来提升用户体验

    在Vue应用中添加过渡效果是一个可以使你的项目感觉更专业的简单方法.通过提升用户体验,可以使你的网站留住更多的用户以及提高转化率. 只需要简单的处理就可以获得巨大的回报,何乐而不为? 在这个指南中,我 ...

  10. 提高开发效率的一些ipython技巧

    目录 一.显示ipython快速参考 二.书签功能 三.查看帮助或信息 四.执行python程序 五.执行剪贴板中的代码 六.与操作系统交互 七.测试代码执行时间 八.性能分析 九.matplotli ...