zoukankan      html  css  js  c++  java
  • TestStand 基础知识[8] Build-In StepTypes(3)

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

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

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

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

    本文主要介绍Synchronization Steps 同步步骤  ,下面所举例子的路径:C:UsersPublicDocumentsNational InstrumentsTestStand 2012ExamplesSynchronization

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

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

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

    在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时,上面的这些同步步骤,使用频率可能就会很高。

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

  • 相关阅读:
    WPF 关于拖拽打开文件的注意事项
    asp.net core 3.1中对Mongodb BsonDocument的序列化和反序列化支持
    用百度webuploader分片上传大文件
    多线程学习笔记
    web.config数据库连接字符串加密
    Visual Studio 2010 常用快捷方式
    Team Foundation Server 2013 日常使用使用手册(四)分支与合并
    Team Foundation Server 2013 日常使用使用手册(三)上传新工程、创建任务、创建bug、设置预警
    Team Foundation Server 2013 日常使用使用手册(二)修改、签入、撤销、回滚、对比代码变更
    Team Foundation Server 2013 日常使用使用手册(一)-本地连接TFS、查看任务
  • 原文地址:https://www.cnblogs.com/YourDirection/p/12327179.html
Copyright © 2011-2022 走看看