码迷,mamicode.com
首页 > 其他好文 > 详细

LabVIEW VI可重入详解

时间:2020-05-06 01:17:29      阅读:702      评论:0      收藏:0      [点我收藏+]

标签:执行   共享   克隆   不能   cat   寄存器   打开   col   shared   

什么是VI可重入?

用来设置当前VI是否可以进行多实例并行执行的VI属性,VI的默认设置为不可重入。

打开VI->Property->Execution 如图下图,可以设置相应的配置。

技术图片

Non-reentrant execution 

不可重入: 多个调用者调用此VI时,是按照顺序逐一调用的。优势是最小的内存消耗,同时也会使得所有调用该VI的共享一个状态,在调用中保留控件和未被初始化移位寄存器的值。

Shared clone reentrant execution

可重入:在实例间共享副本(减少内存使用),允许多个调用者同步并行执行该VI,这个类型的可重入,为了减少内存消耗,在调用中复用克隆副本。

当调用者B调用该VI时,如果克隆实例正在被调用者A使用中,那么LabVIEW 会分配一个新的克隆实例给调用者B。

当调用者B调用该VI时,如果克隆实例没有被使用,那么LabVIEW不会再开辟新的克隆实例。因此每个调用者维护自己的状态,保留控件和未赋值移位寄存器的值

Preallocated clone reentrant execution

可重入:在实例间共享副本(为各个实例预分配副本),允许多个调用者同步并行执行该VI,这个类型的可重入,为每一个实例预分配独立克隆实例,并以开辟更多的克隆实例为代价。

 

那么VI何时使用可重入,并且到底选共享副本还是各个实例预分配副本?

场景和原则

1. 当VI中有使用局部变量、全局变量、或者功能全局变量时,不能设置成---->可重入:在实例间共享副本(减少内存使用)

2. 如读取文件一类时,可以考虑设置可重入,使得调用者可以并行执行,提高效率。

3. 当需要实现一些,共享克隆实例时,可以考虑使用--->可重入:在实例间共享副本(减少内存使用) 例如 递归操作。

4. 如果VI克隆实例暂用资源很小,但是运行时间较长,可以考虑使用---->可重入:在实例间共享副本(为各个实例预分配副本)

5. VI可重入设置,是为多线程调用准备的,如果在该VI被调用过程中,不会出现多线程调用该VI,那么没有必要设置可重入,保持默认即可。

 

LabVIEW VI可重入详解

标签:执行   共享   克隆   不能   cat   寄存器   打开   col   shared   

原文地址:https://www.cnblogs.com/YourDirection/p/12833877.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!