LabVIEW VI可重入詳解


什么是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,那么沒有必要設置可重入,保持默認即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM