LabVIEW建立生產(chǎn)者消費(fèi)者
生產(chǎn)者/消費(fèi)者設(shè)計(jì)模式由并行循環(huán)組成,這些循環(huán)分為兩類:生產(chǎn)者循環(huán)和消費(fèi)者循環(huán)。生產(chǎn)者循環(huán)和消費(fèi)者循環(huán)間的通信可以使用隊(duì)列或通道連線來實(shí)現(xiàn)。
隊(duì)列
LabVIEW內(nèi)置的隊(duì)列操作VI可在函數(shù)選板>>數(shù)據(jù)通信>>隊(duì)列操作(?Functions>>?Data?Communication?>>?Queue?Operations)中找到。
隊(duì)列基于先進(jìn)/先出理論。在生產(chǎn)者/消費(fèi)者設(shè)計(jì)模式中,隊(duì)列可以在生產(chǎn)者循環(huán)和消費(fèi)者循環(huán)之外初始化。生產(chǎn)者循環(huán)為消費(fèi)者循環(huán)生成數(shù)據(jù),所以會(huì)向隊(duì)列添加數(shù)據(jù)(將數(shù)據(jù)添加到隊(duì)列中稱為“入列”)。
消費(fèi)者循環(huán)將從該隊(duì)列中刪除數(shù)據(jù)(從隊(duì)列中刪除數(shù)據(jù)稱為“出列”)。因?yàn)殛?duì)列基于先進(jìn)先出原則,所以消費(fèi)者總是按照生產(chǎn)者向隊(duì)列添加數(shù)據(jù)的順序?qū)?shù)據(jù)進(jìn)行分析。圖1顯示如何在LabVIEW中創(chuàng)建生產(chǎn)者/消費(fèi)者設(shè)計(jì)模式。
圖1:生產(chǎn)者/消費(fèi)者設(shè)計(jì)模式
LabVIEW中提供有關(guān)于使用隊(duì)列的范例,可作為應(yīng)用程序開發(fā)的起點(diǎn)。如果要搜索這些范例,可在LabVIEW范例查找器中搜索“隊(duì)列”(Queue)。
通道
LabVIEW2016新增了通道連線功能。通道連線可以實(shí)現(xiàn)與隊(duì)列相同的功能。
在隊(duì)列中,您可以設(shè)置隊(duì)列引用(獲取隊(duì)列)、添加數(shù)據(jù)(入列)和刪除數(shù)據(jù)(出列),然后關(guān)閉隊(duì)列引用(發(fā)布隊(duì)列);使用通道(Channels)功能,該過程將簡(jiǎn)化為僅設(shè)置數(shù)據(jù)的Writer和Reader。
有關(guān)通道連線和入門模板的更多信息,請(qǐng)參見《LabVIEW幫助文檔:使用通道連線在代碼的并行部分之間通信數(shù)據(jù)》
在處理生產(chǎn)者/消費(fèi)者設(shè)計(jì)模式時(shí),需要注意一些注意事項(xiàng),例如,隊(duì)列的使用和同步。
隊(duì)列使用
問題:?隊(duì)列被綁定到特定的數(shù)據(jù)類型。因此,生產(chǎn)者循環(huán)中產(chǎn)生的每個(gè)不同數(shù)據(jù)條目都需要放置到不同的隊(duì)列中。這可能帶來一個(gè)問題,那就是增加了程序框圖的復(fù)雜性。
解決方案:?隊(duì)列可以接受數(shù)組和簇等數(shù)據(jù)類型。每個(gè)數(shù)據(jù)條目都可以放到一個(gè)簇中。這樣就會(huì)掩蓋簇?cái)?shù)據(jù)類型背后的各種數(shù)據(jù)類型。
同步
問題:?由于生產(chǎn)者/消費(fèi)者設(shè)計(jì)模式并非基于同步,循環(huán)初次執(zhí)行時(shí)并不遵循特定的順序。?因此,在一個(gè)循環(huán)之前啟動(dòng)另一個(gè)循環(huán)可能會(huì)導(dǎo)致問題。
解決方案:?可以通過將事件結(jié)構(gòu)添加到生產(chǎn)者/消費(fèi)者設(shè)計(jì)模式解決這類同步問題。?圖2顯示了實(shí)現(xiàn)這一功能的模板。?
圖2:在生產(chǎn)者/消費(fèi)者設(shè)計(jì)模式中使用事件結(jié)構(gòu)文章來源:http://www.zghlxwxcb.cn/news/detail-723038.html
這是LabVIEW的一個(gè)功能介紹,更多的使用方法與開發(fā)案例,歡迎登錄官網(wǎng),了解更多信息。有需要LabVIEW項(xiàng)目合作開發(fā),請(qǐng)與我們聯(lián)系。文章來源地址http://www.zghlxwxcb.cn/news/detail-723038.html
到了這里,關(guān)于LabVIEW建立生產(chǎn)者消費(fèi)者的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!