第3章 LabVIEW與多線程_第1頁(yè)
第3章 LabVIEW與多線程_第2頁(yè)
第3章 LabVIEW與多線程_第3頁(yè)
第3章 LabVIEW與多線程_第4頁(yè)
第3章 LabVIEW與多線程_第5頁(yè)
已閱讀5頁(yè),還剩69頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

LabVIEW與多線程

IntelligentElectronicsInstituteHuazhongUniversityofScience&Technology目錄多線程技術(shù)LabVIEW多線程環(huán)境LabVIEW多線程程序設(shè)計(jì)LabVIEW線程通信與同步提示與建議習(xí)題23.1多線程技術(shù)基本概念程序是指一個(gè)靜態(tài)的指令序列;進(jìn)程為執(zhí)行程序指令的線程而保留的一系列資源的集合;線程是操作系統(tǒng)用來(lái)調(diào)度執(zhí)行的最小單位。程序進(jìn)程線程33.1多線程技術(shù)多線程在運(yùn)行一個(gè)多線程的程序時(shí),為了運(yùn)行所有的線程,操作系統(tǒng)為每個(gè)獨(dú)立線程安排一些CPU時(shí)間,每個(gè)線程在使用完時(shí)間片后交出控制權(quán),系統(tǒng)再將CPU時(shí)間片分配給下一個(gè)線程。由于每個(gè)時(shí)間片足夠短,這樣就造成一種假象:好像這些線程在同時(shí)運(yùn)行。

(a)從用戶(hù)角度看多線程(b)從系統(tǒng)角度看多線程應(yīng)用多線程技術(shù)的目的就是盡可能地利用CPU時(shí)間。43.1多線程技術(shù)多處理器多處理器是指在一臺(tái)計(jì)算機(jī)中有兩個(gè)以上的處理器,每個(gè)處理器可以同時(shí)執(zhí)行不同的線程。在多處理器的作用下,多個(gè)線程可以同時(shí)執(zhí)行,從而以更少的時(shí)間完成更多的任務(wù)。53.1多線程技術(shù)線程調(diào)度無(wú)論進(jìn)程還是線程都是操作系統(tǒng)中進(jìn)行CPU任務(wù)調(diào)度的程序單元;CPU調(diào)度一個(gè)進(jìn)程時(shí)必定發(fā)生一個(gè)進(jìn)程上下文切換;CPU調(diào)度一個(gè)進(jìn)程內(nèi)的多個(gè)線程時(shí)則可以避免上下文切換的發(fā)生;采用多線程可以減少因上下文切換導(dǎo)致的CPU時(shí)間開(kāi)銷(xiāo)。63.1多線程技術(shù)在多進(jìn)程操作系統(tǒng)中,當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí)系統(tǒng)同時(shí)就為進(jìn)程創(chuàng)建了一個(gè)主線程,由這個(gè)主線程生成額外的子線程,然后這些線程又可以生成更多的子線程,所有的線程共同構(gòu)成了一個(gè)進(jìn)程的線程集。73.1多線程技術(shù)線程優(yōu)先級(jí)線程被調(diào)度的先后順序是依據(jù)線程的優(yōu)先級(jí)來(lái)完成的;當(dāng)一個(gè)線程被創(chuàng)建時(shí),操作系統(tǒng)將分配給線程一個(gè)優(yōu)先級(jí);在調(diào)度周期的開(kāi)始,系統(tǒng)從線程的就緒隊(duì)列中選擇擁有最高優(yōu)先級(jí)的線程來(lái)執(zhí)行。83.1多線程技術(shù)影響線程調(diào)度的其它因素線程調(diào)度除了依據(jù)線程優(yōu)先級(jí)以外,還受系統(tǒng)調(diào)度策略和算法等因素的影響;調(diào)度算法的優(yōu)劣直接影響到CPU運(yùn)行的效率和性能,不佳的調(diào)度算法不僅可能降低系統(tǒng)的反應(yīng)時(shí)間,而且可能導(dǎo)致某些線程或進(jìn)程長(zhǎng)時(shí)間得不到調(diào)度;目前操作系統(tǒng)一般采用搶占式調(diào)度。93.1多線程技術(shù)搶占式調(diào)度搶占式調(diào)度是指當(dāng)一個(gè)線程或進(jìn)程所分配的時(shí)間片過(guò)期或有更高優(yōu)先級(jí)的線程或進(jìn)程出現(xiàn)時(shí),如果調(diào)度進(jìn)程還需要進(jìn)行上下文的切換,操作系統(tǒng)將暫停其在CPU上繼續(xù)執(zhí)行,調(diào)度另外的線程或進(jìn)程到CPU上執(zhí)行。搶占式調(diào)度阻止了任何線程長(zhǎng)期占用處理器的情況發(fā)生;最短任務(wù)優(yōu)先調(diào)度策略偏向于預(yù)估完成時(shí)間最短的線程,有利于迅速減少系統(tǒng)中線程數(shù)量,提高處理器的吞吐量。103.1多線程技術(shù)線程通信如果線程間的通信發(fā)生在一個(gè)進(jìn)程中,可以通過(guò)從堆棧片段傳遞值的方式來(lái)完成;如果一個(gè)進(jìn)程中的線程同另一個(gè)進(jìn)程中的線程進(jìn)行通信,則不能以線程通信的方式來(lái)處理,而必須以進(jìn)程間通信來(lái)對(duì)待,采取如環(huán)境變量、命名管道、共享內(nèi)存等技術(shù)手段來(lái)解決;在多數(shù)情況下,線程通信的代價(jià)要小于進(jìn)程通信的代價(jià)。113.1多線程技術(shù)線程同步線程同步一般分為數(shù)據(jù)同步、設(shè)備同步和任務(wù)同步3種情況。數(shù)據(jù)同步用于保證并發(fā)線程以一種安全的模式訪問(wèn)內(nèi)存塊;設(shè)備同步用于多個(gè)線程訪問(wèn)單一設(shè)備時(shí)對(duì)實(shí)時(shí)操作和優(yōu)先權(quán)的嚴(yán)格控制,阻止線程破壞設(shè)備的狀態(tài);任務(wù)同步用于加強(qiáng)線程間邏輯關(guān)系上的前置條件和后置條件。12

3.2LabVIEW多線程環(huán)境

支持多線程模式的程序設(shè)計(jì)語(yǔ)言用函數(shù)直接創(chuàng)建多線程:在VisualC++語(yǔ)言中,提供了封裝在Win32API中的CreateThread、ExitThread等函數(shù)方法的CWinThread類(lèi),為創(chuàng)建多線程應(yīng)用程序提供了基本框架;從執(zhí)行系統(tǒng)和數(shù)據(jù)流控制兩個(gè)層次實(shí)現(xiàn)多線程程序設(shè)計(jì):LabVIEW開(kāi)發(fā)環(huán)境。133.2LabVIEW多線程環(huán)境LabVIEW執(zhí)行系統(tǒng)類(lèi)似于Java虛擬機(jī),是特有的中間執(zhí)行平臺(tái)。LabVIEW程序框圖編譯生成的,并不是操作系統(tǒng)平臺(tái)上的可執(zhí)行程序代碼,而是一種特有的程序組織代碼,這種代碼必須通過(guò)LabVIEW的執(zhí)行系統(tǒng)來(lái)實(shí)現(xiàn)在操作系統(tǒng)上的運(yùn)行;在創(chuàng)建LabVIEW發(fā)布的可執(zhí)行程序時(shí),對(duì)于沒(méi)有LabVIEW執(zhí)行系統(tǒng)環(huán)境的計(jì)算機(jī)需要在發(fā)布組件選項(xiàng)中包含LabVIEW運(yùn)行引擎(Run-TimeEngine)。143.2LabVIEW多線程環(huán)境執(zhí)行子系統(tǒng)(6個(gè))用戶(hù)界面(userinterface)、標(biāo)準(zhǔn)(standard)、儀器I/O(instrumentI/O)、數(shù)據(jù)采集(dataacquisition)、其他1(other1)、其他2(other2)。

在“文件→VI屬性→執(zhí)行”面板中可以對(duì)執(zhí)行子系統(tǒng)進(jìn)行更改。注意:“與調(diào)用方相同”(sameascaller)不是一個(gè)子系統(tǒng),它表示其執(zhí)行子系統(tǒng)與調(diào)用該子VI的程序的執(zhí)行子系統(tǒng)相同153.2LabVIEW多線程環(huán)境子系統(tǒng)分工對(duì)執(zhí)行系統(tǒng)進(jìn)行細(xì)分的最初目的在于將不同用途的VI嚴(yán)格分配到不同的執(zhí)行子系統(tǒng)中,各個(gè)執(zhí)行子系統(tǒng)具體分工如下:用戶(hù)界面子系統(tǒng):主要用于屏幕畫(huà)圖,以及鍵盤(pán)、鼠標(biāo)輸入等,這個(gè)子系統(tǒng)也用于特定類(lèi)型的VI執(zhí)行。標(biāo)準(zhǔn)子系統(tǒng):如果需要為用戶(hù)界面保持專(zhuān)用運(yùn)行時(shí)間,應(yīng)當(dāng)為VI指定這個(gè)子系統(tǒng)。儀器I/O子系統(tǒng):該子系統(tǒng)主要用于完成與VXI系統(tǒng)、GPIB系統(tǒng)、串行儀器或網(wǎng)絡(luò)之間的通信。數(shù)據(jù)采集子系統(tǒng):該子系統(tǒng)主要用于數(shù)據(jù)采集。其他子系統(tǒng)1:當(dāng)程序中的任務(wù)需要自己的線程時(shí)使用。其他子系統(tǒng)2:當(dāng)程序中的任務(wù)需要自己的線程時(shí)使用。163.2LabVIEW多線程環(huán)境用戶(hù)界面子系統(tǒng)用戶(hù)界面子系統(tǒng)是LabVIEW系統(tǒng)運(yùn)行時(shí)必須加載的,而其他幾個(gè)執(zhí)行子系統(tǒng)則是可選的;用戶(hù)界面子系統(tǒng)實(shí)際上是一個(gè)單線程系統(tǒng),只有一個(gè)用戶(hù)界面線程執(zhí)行各種任務(wù);在LabVIEW中所有與用戶(hù)界面相關(guān)的操作都由用戶(hù)界面子系統(tǒng)負(fù)責(zé),其他執(zhí)行子系統(tǒng)不負(fù)責(zé)管理用戶(hù)界面。173.2LabVIEW多線程環(huán)境線程數(shù)量設(shè)置無(wú)法通過(guò)編寫(xiě)程序來(lái)實(shí)現(xiàn)對(duì)LabVIEW執(zhí)行系統(tǒng)中線程變化的控制,但作為輔助工具,LabVIEW提供了一個(gè)線程配置程序threadconfig.vi,它位于LabVIEW安裝目錄\vi.lib\utilities\sysinfo.llb中;一般情況下,不需要修改LabVIEW系統(tǒng)環(huán)境的默認(rèn)線程數(shù)量設(shè)置。當(dāng)LabVIEW系統(tǒng)運(yùn)行在一個(gè)專(zhuān)用計(jì)算機(jī)上,可以根據(jù)計(jì)算機(jī)的硬件配置情況適當(dāng)增加線程的數(shù)量。而在一個(gè)非專(zhuān)用計(jì)算機(jī)上增加LabVIEW系統(tǒng)中線程的數(shù)量,則可能影響其他程序的運(yùn)行,甚至可能由于線程過(guò)多導(dǎo)致計(jì)算機(jī)整體性能的下降。183.2LabVIEW多線程環(huán)境線程配置程序threadconfig.vi

線程配置程序界面

線程配置對(duì)話框193.2LabVIEW多線程環(huán)境VI優(yōu)先級(jí)LabVIEW程序優(yōu)先級(jí)的設(shè)置方法可以分為程序控制和系統(tǒng)控制兩種。程序控制方法是指用戶(hù)通過(guò)在程序框圖中使用等待函數(shù)來(lái)控制程序內(nèi)部并行任務(wù)的執(zhí)行順序;系統(tǒng)控制方法是通過(guò)在VI屬性中選擇相應(yīng)的VI執(zhí)行優(yōu)先級(jí)別來(lái)控制VI的執(zhí)行順序。

任務(wù)1,優(yōu)先級(jí)高任務(wù)2,優(yōu)先級(jí)低203.2LabVIEW多線程環(huán)境注意VI的優(yōu)先級(jí)問(wèn)題考慮修改VI的優(yōu)先級(jí)設(shè)置時(shí)要慎重小心,一般情況下,用戶(hù)創(chuàng)建VI的默認(rèn)為普通優(yōu)先級(jí),應(yīng)盡量避免修改VI的優(yōu)先級(jí),只有那些特殊的VI才被指定為非普通的優(yōu)先級(jí);在當(dāng)一個(gè)VI確有必要使用非普通的優(yōu)先級(jí)時(shí),應(yīng)當(dāng)遵循這條原則:不要讓高優(yōu)先級(jí)的VI持續(xù)運(yùn)行;VI優(yōu)先級(jí)是隱含的,只能通過(guò)查詢(xún)VI屬性才能了解。213.2LabVIEW多線程環(huán)境子程序優(yōu)先級(jí)子程序優(yōu)先級(jí)并不是一個(gè)真正的優(yōu)先級(jí),它并不標(biāo)識(shí)VI的相對(duì)優(yōu)先級(jí)別,僅用來(lái)標(biāo)識(shí)一類(lèi)特殊的LabVIEW程序,具有該優(yōu)先級(jí)的VI不會(huì)被加入到執(zhí)行子系統(tǒng)的運(yùn)行隊(duì)列中。鮮明的特征:VI的用戶(hù)界面不能更新,只能調(diào)用子程序優(yōu)先級(jí)的子VI,不能調(diào)試等;子程序優(yōu)先級(jí)的VI可以調(diào)用其他子程序優(yōu)先級(jí)的VI,不能調(diào)用其他優(yōu)先級(jí)的VI。223.2LabVIEW多線程環(huán)境子程序優(yōu)先級(jí)當(dāng)選擇了子程序優(yōu)先級(jí)后,以下幾個(gè)選項(xiàng)就不能選擇了:打開(kāi)時(shí)運(yùn)行(Runwhenopened);調(diào)用時(shí)掛起(Suspendwhencalled);運(yùn)行時(shí)自動(dòng)處理菜單(Autohandlingofmenusatlaunch);允許調(diào)試(Allowdebugging);調(diào)用時(shí)清除顯示控件(Clearindicatorswhencalled)。233.2LabVIEW多線程環(huán)境子程序優(yōu)先級(jí)VI示例“字符串”選項(xiàng)板下的“刪除空白”(TrimWhitespace.vi)243.2LabVIEW多線程環(huán)境多線程程序的優(yōu)勢(shì)多線程技術(shù)在LabVIEW程序中充分發(fā)揮了重要的作用,具有以下幾點(diǎn)優(yōu)勢(shì):更高效地使用CPU;更好的系統(tǒng)可靠性;更優(yōu)化的多處理器性能。253.3LabVIEW多線程程序設(shè)計(jì)線程優(yōu)化示例1:要求:監(jiān)控重物的速度變化過(guò)程,繪制S-t(距離—時(shí)間)曲線、V-t(速度—時(shí)間)曲線、V-S(速度—距離)曲線并顯示所有數(shù)據(jù)。初始程序分3步執(zhí)行第一幀:得到S-t數(shù)據(jù)263.3LabVIEW多線程程序設(shè)計(jì)線程優(yōu)化第二幀:得到V-t數(shù)據(jù)273.3LabVIEW多線程程序設(shè)計(jì)線程優(yōu)化第三幀:得到V-S數(shù)據(jù)283.3LabVIEW多線程程序設(shè)計(jì)線程優(yōu)化發(fā)揮多線程的優(yōu)勢(shì),將程序優(yōu)化為并行結(jié)構(gòu)并行結(jié)構(gòu)下的優(yōu)化程序293.3LabVIEW多線程程序設(shè)計(jì)線程優(yōu)化示例2:以一個(gè)數(shù)據(jù)采集程序?yàn)槔齺?lái)介紹最大化數(shù)據(jù)流的編程。原程序由順序結(jié)構(gòu)實(shí)現(xiàn)第1幀有兩個(gè)執(zhí)行流程:一是產(chǎn)生波形;二是配置模擬輸入和輸出。303.3LabVIEW多線程程序設(shè)計(jì)線程優(yōu)化第2幀的功能是發(fā)送波形數(shù)據(jù)。313.3LabVIEW多線程程序設(shè)計(jì)線程優(yōu)化第3幀的功能是采集波形。323.3LabVIEW多線程程序設(shè)計(jì)線程優(yōu)化第4幀的功能是停止輸入和輸出的任務(wù)。333.3LabVIEW多線程程序設(shè)計(jì)線程優(yōu)化線程優(yōu)化后的程序框圖這個(gè)程序是按照配置、產(chǎn)生波形、讀取波形的順序執(zhí)行的。只有等到前一步驟中錯(cuò)誤簇的信息到達(dá)后,下一步驟才能執(zhí)行。輸入和輸出配置VI函數(shù)采用并行結(jié)構(gòu),并使用合并錯(cuò)誤函數(shù)來(lái)保證只有輸入和輸出都已經(jīng)配置好之后才可以產(chǎn)生波形。343.3LabVIEW多線程程序設(shè)計(jì)超線程程序無(wú)論是超線程計(jì)算機(jī)還是多處理器計(jì)算機(jī),都可以采用超線程機(jī)制對(duì)應(yīng)用程序進(jìn)行性能優(yōu)化。示例:計(jì)算所有大于2的質(zhì)數(shù)。初步想法單循環(huán)解質(zhì)數(shù)程序框圖。353.3LabVIEW多線程程序設(shè)計(jì)超線程程序優(yōu)化程序雙循環(huán)解質(zhì)數(shù)程序框圖。363.3LabVIEW多線程程序設(shè)計(jì)可重入技術(shù)可以在“文件→VI屬性→執(zhí)行”框中設(shè)置VI為可重入,在可重入VI中,每個(gè)調(diào)用都產(chǎn)生一個(gè)副本,有著獨(dú)自的狀態(tài)信息,這樣在執(zhí)行時(shí),多個(gè)相同的子VI可以同時(shí)執(zhí)行??芍厝雸?zhí)行在以下情況下是很有用的:VI需要等待一個(gè)特定的時(shí)間或者超時(shí)后才執(zhí)行;VI中含有不能與其他實(shí)例共享的數(shù)據(jù)。373.3LabVIEW多線程程序設(shè)計(jì)可重入技術(shù)示例:設(shè)計(jì)一個(gè)仿真芯片74LS14

74LS14的功能圖

施密特非門(mén)的傳輸特性383.3LabVIEW多線程程序設(shè)計(jì)可重入技術(shù)芯片74LS14是由6個(gè)施密特非門(mén)構(gòu)成,因此74LS14.vi同時(shí)需要調(diào)用6個(gè)shimit.vi子VI。shimit.vi的程序框圖。393.3LabVIEW多線程程序設(shè)計(jì)可重入技術(shù)74LS14.vi的程序框圖。403.4LabVIEW線程通信與同步局部變量局部變量(LocalVariable)是LabVIEW為改善圖形化編程靈活性而專(zhuān)門(mén)設(shè)計(jì)的特殊節(jié)點(diǎn),主要是解決數(shù)據(jù)和對(duì)象在同一VI程序中的復(fù)用問(wèn)題。局部變量實(shí)際上是程序框圖中已經(jīng)存在的某個(gè)對(duì)象的復(fù)制品。需要某個(gè)對(duì)象既可讀(讀出當(dāng)前值)又可寫(xiě)(寫(xiě)入更新值)時(shí),就可以使用局部變量。413.4LabVIEW線程通信與同步創(chuàng)建局部變量:兩種方式第一種方式是在按照“函數(shù)→編程→結(jié)構(gòu)→局部變量”路徑創(chuàng)建,此時(shí)局部變量的圖標(biāo)有一個(gè)問(wèn)號(hào),需要選擇與之相關(guān)聯(lián)的對(duì)象后方可使用;第二種方式是選擇目標(biāo)對(duì)象的右鍵快捷菜單中的“創(chuàng)建→局部變量”菜單項(xiàng),放置到背面板的相應(yīng)位置,這樣就直接創(chuàng)建了該對(duì)象的局部變量。423.4LabVIEW線程通信與同步局部變量有兩種狀態(tài):讀狀態(tài)和寫(xiě)狀態(tài)讀狀態(tài)相當(dāng)于控制對(duì)象,外觀和控制對(duì)象的端子相似,為寬邊框;寫(xiě)狀態(tài)相當(dāng)于顯示對(duì)象,外觀和顯示對(duì)象相似,為細(xì)邊框。局部變量最常用于兩種情況:并行循環(huán)控制和對(duì)變量數(shù)值的更新并行循環(huán)控制主要用于用一個(gè)變量同時(shí)控制幾個(gè)并行While循環(huán)的情況;變量數(shù)值的更新是指在程序運(yùn)行時(shí),同一個(gè)對(duì)象既可作為輸入給程序賦值,也可作為輸出顯示當(dāng)前狀態(tài)。433.4LabVIEW線程通信與同步全局變量如果要在幾個(gè)VI間共享數(shù)據(jù),局部變量無(wú)法解決,需要使用全局變量(GlobalVariable)來(lái)實(shí)現(xiàn);全局變量的創(chuàng)建方法為:按照“函數(shù)→編程→結(jié)構(gòu)→全局變量”路徑創(chuàng)建,在程序框圖中會(huì)生成一個(gè)“?”端子,這表示該變量尚未定義,該端子上有一個(gè)地球圖標(biāo),雙擊未定義的全局變量端子,或用右鍵快捷菜單中的“打開(kāi)前面板”命令可打開(kāi)一個(gè)全局變量前面板,它用于定義全局變量的內(nèi)容。443.4LabVIEW線程通信與同步全局變量應(yīng)用示例:測(cè)速系統(tǒng)全局變量前面板看上去和普通VI的前面板相似,但沒(méi)有背面板。工具欄中也沒(méi)有運(yùn)行和調(diào)試的相關(guān)工具圖標(biāo)。全局變量前面板。453.4LabVIEW線程通信與同步測(cè)距儀器初始化程序463.4LabVIEW線程通信與同步測(cè)距儀器測(cè)試程序473.4LabVIEW線程通信與同步事件發(fā)生事件發(fā)生(Occurrence)技術(shù)可以用來(lái)在VI或部分框圖程序之間傳遞觸發(fā)時(shí)間,利用事件發(fā)生技術(shù)可以避免輪詢(xún)帶來(lái)的系統(tǒng)資源浪費(fèi);對(duì)于一般的應(yīng)用來(lái)說(shuō),用戶(hù)應(yīng)從調(diào)用“產(chǎn)生事件發(fā)生”函數(shù)開(kāi)始來(lái)創(chuàng)建事件發(fā)生參數(shù)值,該參數(shù)值必須要傳遞到所有其他事件操作中。然后,用戶(hù)既可以通過(guò)調(diào)用“等待事件發(fā)生”函數(shù)來(lái)發(fā)生,也可以通過(guò)設(shè)置事件功能來(lái)創(chuàng)建一個(gè)事件的發(fā)生。在LabVIEW環(huán)境中,可以有多重的“等待事件發(fā)生”函數(shù)節(jié)點(diǎn)存在,然后當(dāng)與之聯(lián)系的設(shè)置事件功能被調(diào)用時(shí),所有的事件都會(huì)在同一時(shí)間觸發(fā)。483.4LabVIEW線程通信與同步事件發(fā)生示例事件發(fā)生測(cè)試程序前面板493.4LabVIEW線程通信與同步事件發(fā)生的測(cè)試程序框圖503.4LabVIEW線程通信與同步事件發(fā)生用戶(hù)子VI的程序框圖513.4LabVIEW線程通信與同步通知通知(Notification)技術(shù)通常用于兩個(gè)相互獨(dú)立的框圖程序之間或同一臺(tái)計(jì)算機(jī)中兩個(gè)不同VI之間的同步通信;通知器(Notifier)是基于通知技術(shù)的通信工具,可以看做數(shù)據(jù)之間的郵箱,一部分框圖程序向郵箱中發(fā)送數(shù)據(jù),另一部分框圖程序從這個(gè)郵箱中收取數(shù)據(jù);對(duì)于通知器,在沒(méi)有通知消息發(fā)生時(shí),程序框圖處于等待狀態(tài),避免了無(wú)休止地循環(huán)檢測(cè),從而減少了計(jì)算機(jī)時(shí)間的浪費(fèi);通知技術(shù)不能用于網(wǎng)絡(luò)或VIServers之間的通信。523.4LabVIEW線程通信與同步通知流程從調(diào)用“獲取通知器引用”(ObtainNotifier)函數(shù)來(lái)開(kāi)始創(chuàng)建通知參數(shù)值,使用該函數(shù)時(shí)必須輸入元素的數(shù)據(jù)類(lèi)型;通過(guò)“發(fā)送通知”(SendNotifier)發(fā)送信息;接收方通過(guò)“等待通知”(WaitonNotifier)得到發(fā)送的信息。533.4LabVIEW線程通信與同步通知器示例Notification測(cè)試程序前面板543.4LabVIEW線程通信與同步通知測(cè)試程序框圖553.4LabVIEW線程通信與同步通知用戶(hù)子VI的程序框圖563.4LabVIEW線程通信與同步通知的優(yōu)缺點(diǎn)通知和事件發(fā)生有些類(lèi)似,不需要使用輪詢(xún)技術(shù),減少了系統(tǒng)開(kāi)銷(xiāo);通知相比事件發(fā)生機(jī)制有一定的優(yōu)勢(shì):事件發(fā)生不能傳遞數(shù)據(jù),只能觸發(fā)事件,而通知不僅可以傳遞數(shù)據(jù),還可以通過(guò)“取消通知”函數(shù)刪除信息;通知也有一些不足:沒(méi)有數(shù)據(jù)隊(duì)列,有時(shí)會(huì)丟失一些事件,因?yàn)樾碌氖录?huì)覆蓋舊的沒(méi)有響應(yīng)的事件。573.4LabVIEW線程通信與同步隊(duì)列隊(duì)列(Queue)結(jié)構(gòu)是一種先進(jìn)先出(FIFO)的結(jié)構(gòu);用隊(duì)列技術(shù),可以將一個(gè)有序的消息(或數(shù)據(jù))從一個(gè)程序中傳遞到另一個(gè)與之相獨(dú)立的并行運(yùn)行的程序中;隊(duì)列技術(shù)把數(shù)據(jù)發(fā)送到一個(gè)隊(duì)列緩存中,如果沒(méi)有程序?qū)⑦@些數(shù)據(jù)讀出,這些數(shù)據(jù)將一直保存在隊(duì)列緩存中,直到有一個(gè)程序?qū)⑵渥x出并刪除;如果有兩個(gè)應(yīng)用程序都在等待同一個(gè)隊(duì)列中的同一條數(shù)據(jù),只有那個(gè)動(dòng)作快的程序會(huì)收到數(shù)據(jù),動(dòng)作慢的則不會(huì)收到預(yù)期的數(shù)據(jù),因?yàn)檫@條數(shù)據(jù)已經(jīng)被動(dòng)作快的程序讀出并刪除了。583.4LabVIEW線程通信與同步隊(duì)列的應(yīng)用示例Queue測(cè)試程序前面板593.4LabVIEW線程通信與同步隊(duì)列測(cè)試程序框圖603.4LabVIEW線程通信與同步隊(duì)列用戶(hù)子VI的程序框圖613.4LabVIEW線程通信與同步信號(hào)量信號(hào)量(Semaphore)技術(shù)可以用于限制同時(shí)訪問(wèn)一個(gè)被保護(hù)的共享資源的任務(wù)數(shù)目;通過(guò)一個(gè)公用的信號(hào)量,可以在某一時(shí)刻僅允許一個(gè)任務(wù)執(zhí)行一個(gè)受保護(hù)的臨界區(qū)代碼;信號(hào)量和其他同步機(jī)制是不同的,其他機(jī)制主要是喚醒一個(gè)等待任務(wù),信號(hào)量則是告訴任務(wù)需要等待其他任務(wù)允許其執(zhí)行時(shí)才執(zhí)行,所以能夠有效地保護(hù)公有資源。623.4LabVIEW線程通信與同步信號(hào)量的應(yīng)用示例信號(hào)量測(cè)試程序前面板633.4LabVIEW線程通信與同步信號(hào)量測(cè)試程序框圖643.4LabVIEW線程通信與同步信號(hào)量用戶(hù)子VI的程序框圖653.4LabVIEW線程通信與同步集合點(diǎn)集合點(diǎn)(Rendezvous)技術(shù)可以使若干并行的任務(wù)同步執(zhí)行;只有所有的任務(wù)到達(dá)后,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論