色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

詳細講解一下不同的LabVIEW多線程同步機制

jf_V8z5L4Nx ? 來源:傳感測控物聯網 ? 2023-08-03 10:16 ? 次閱讀

我們提到過使用局部變量、全局變量時,必須注意處理好并發訪問。

舉個例子:有A、B、C三個線程在并發執行。A線程修改了變量V的值,期望線程C能夠讀取到最新的值。B線程卻在C線程讀取變量V的值之前修改了V的值。這種情況我們說變量V被污染了、數據臟了。 要處理好變量的并發訪問、多線程對變量的訪問,我們需要使用同步機制。

在多線程軟件設計中,不僅僅對變量的訪問,對任何競爭性資源的使用/訪問都必須使用合理的同步機制進行管理。比如,有兩個線程都需要使用某個模擬輸出通道,但是模擬輸出通道只有1個、同一時刻只能由1個線程使用,這種情況下我們把這個模擬輸出通道稱作競爭性資源。

如果不對這個模擬輸出通道的訪問進行合理的管理,可能導致輸出錯誤的模擬量、線程死鎖、軟件假死等問題。

LabVIEW可用的同步機制

在Programming->Synchronization分類下,我們可以看到LabVIEW里可用的同步機制。

0594e44c-3137-11ee-9e74-dac502259ad0.png

名稱 作用 相關VI
通知器操作
Notifier Operations
掛起某個線程直到收到某個通知 Wait on Notification、Send Notification等
隊列操作
QueueOperations
使用隊列在線程內或線程間傳遞數據 Enqueue Element、DequeueElement等
信號
Semphore
通過信號量限制對競爭性資源的訪問 Acquire Semphore、Release Semphore等
集合點
Rendezvous
通過集合點同步多個線程。每個到達集合點的任務將等待,直到集合點處等待的任務達到指定的數量后,所有任務才繼續執行。 Wait at Rendezvous、Resize Rendezvous等
事件發生
Occurrence
通過事件發生控制和同步線程內或線程間的活動。 Generate Occurrence、Wait on Occurrence等
首次調用
First Call?
判斷某段代碼或某個子VI是否首次執行 /
同步數據流
Synchronize Data Flow
同步數據流,可使用多個線程的數據傳送在該VI處得到同步,以確保數據傳送順序。 /

同步機制的應用

下面我們用具體的例子來詳細講解一下不同的同步機制。

1)Notifer Operations

05a8755c-3137-11ee-9e74-dac502259ad0.png

上面這個示例,Loop1和Loop2是兩個并行的線程。這是實現多線程的最基本的方法。Loop1負責產生數據和停止這兩個線程的運行;Loop2負責讀取Loop1產生的數據,并在需要的時候及時終止線程(退出循環)。它是怎么實現的呢?Loop2等待數據通知器發出通知、等待終止通知器發出通知,收到通知后把數據讀出來或者退出循環。Loop1則是把數據或者退出控件值通過發送通知傳遞給Loop2。

第一步:Obtain Notifer,獲取通知器,如果不存在則創建。創建時按照初始值進行初始化。

第二步:Send Notification,發送通知。把數據或者控件值通過發送通知發送給等待對應通知器的線程。

第三步:Wait on Notification,等待通知。Loop2里調用Wait on Notification掛起線程,直到收到Loop1發出的通知后繼續執行。

第四步:Release Notifer,釋放通知器。釋放資源,避免內存泄露。 這個示例里Loop1加了100ms的等待,可以確保通過Send Notification發送出去的數據可以被Loop2獲取到。

如果沒有這個等待100ms,Loop1發送的數據是可能丟失的,通知器不會緩沖已經發送的消息,新的消息會覆蓋舊的消息。如果需要緩沖消息(連帶數據),可以使用隊列。

關于通知器,我們再看一個VI:Wait on Notification from Multiple,它方便我們等待多個通知,實現多對一的同步。

05d56e68-3137-11ee-9e74-dac502259ad0.png

2)Queue Operations

下面這個代碼,實現的功能和上面Notifier Operations里的例子是一樣的。不同的是這里用的是隊列(Queue)。隊列的特點是先進先出(FIFO)、緩存數據。

前面提到過,如果Loop1沒有100ms等待,使用Notifer Operations是可能會丟失數據的,但是隊列這里是不會的。哪怕我們去除Loop1里的100ms等待、在Loop2里加上100ms等待,讓數據產生的速度大于數據被讀取的速度,也是不會導致數據丟失的,來不及被讀取的數據都會被存儲在隊列里。

05ec787e-3137-11ee-9e74-dac502259ad0.png

隊列不能實現類似Wait on Notification from Multiple的功能。

3)Semaphore

Semaphore,信號量,是一個常見且重要的概念。可以簡單理解為類似紅綠燈(信號燈)的功能。四個方向的車都要過十字路口,十字路口又不能同時過的,它是一個競爭性資源,不同方向的車(線程)對它的使用存在競爭。實際生活中是怎么辦的呢?誰獲得了綠燈(信號量)誰就可以通過。 多個線程訪問競爭性資源前,先嘗試獲取信號量,能夠獲得信號量的線程有權使用競爭性資源,使用完競爭性資源后釋放信號量(單方向綠燈不能一直亮著?。?。

061cdbf4-3137-11ee-9e74-dac502259ad0.png

此外,對關鍵代碼段(Critical Section)也需要使用信號量進行保護。關鍵代碼段是指涉及變量或競爭性資源訪問的代碼,采用信號量進行管理,以避免多個線程同時修改變量或試圖同時訪問競爭性資源。

4)Rendezvous

Rendezvous,集合點,比較好理解,大家都到集合點后再出發。

例如下面這個代碼:

第一步,創建集合點。集合點大小為2,表示需要等待兩個任務到達集合點代碼才能往下執行。

第二步、第三步,在集合點等待,Wait at Rendezvous。當Loop1和Loop2的數據流都到達集合點后,Loop1和Loop2才能夠往下繼續執行。

第四步,銷毀集合點,釋放內存。

0657b21a-3137-11ee-9e74-dac502259ad0.png

5)Occurrences

事件發生(Occurrences),用于在不同代碼位置或不同線程之間同步活動。事件發生不需要輪詢。 例如以下代碼: 第一步,產生一個事件發生(Occurrence)。 第二步,Loop2等待第一步產生的Occurrence。這個時候Loop2線程被掛起,只有等待的事件發生(Occurrence)被Set后這個線程才會繼續執行。 第三步,Loop1在完成其它可能的工作后,Set第一步中產生的事件發生(Occurrence),以使得所有在等待該Occurrence的線程可以繼續運行。

06961b86-3137-11ee-9e74-dac502259ad0.png

6)First Call?、Synchronize Data Flow

First Call?檢查某段代碼或者某個子VI是否是第一次運行。 Synchronize Data Flow用于同步數據訪問,它有四個輸入端,并有四個輸出端與輸入端一一對應。只有四個輸入端的數據都達到該VI節點了,代碼才會從該節點繼續往下執行。 例如下面代碼,當First Call?檢查到該VI是第一次運行時,先等待四個模擬信號數據(可以是實際項目中的文件讀取、數據采集、系統初始化等工作)都到齊后,再往下執行代碼。

06b5cea4-3137-11ee-9e74-dac502259ad0.png

所以下面這個測試代碼(ONCE就是上面的VI)里,只會有一個Graph控件會有波形數據顯示。另一個Graph控件的ONCE子VI被判斷為非首次執行,沒有波形數據產生。

06ca714c-3137-11ee-9e74-dac502259ad0.png

使用好這些同步機制可以讓我們設計出可靠的應用軟件。涉及代碼內并發訪問、多線程、競爭性資源使用的,必須采用一定的同步機制,否則軟件一定會有出錯的時候——可能暫時沒發現,但是隱患一直在。





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • LabVIEW
    +關注

    關注

    1970

    文章

    3654

    瀏覽量

    323360
  • 緩沖器
    +關注

    關注

    6

    文章

    1922

    瀏覽量

    45473
  • 模擬器
    +關注

    關注

    2

    文章

    875

    瀏覽量

    43210
  • Graph
    +關注

    關注

    0

    文章

    36

    瀏覽量

    9081
  • FIFO存儲
    +關注

    關注

    0

    文章

    103

    瀏覽量

    5969

原文標題:LabVIEW多線程同步機制

文章出處:【微信號:傳感測控物聯網,微信公眾號:傳感測控物聯網】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    LabView多線程語言

    LabView多線程語言以前只會照貓畫虎的寫些簡單的程序,些基本原理不是很清晰。從網上找了些資料,這里總結
    發表于 06-08 10:13

    Linux內核同步機制

    在現代操作系統里,同時間可能有多個內核執行流在執行,因此內核其實象多進程多線程編程樣也需要同步機制
    發表于 08-06 07:08

    多線程同步機制在應用程序與驅動程序通信中的應用

    本文對Windows NT 操作系統的多線程同步機制同步對象進行了分析,以其在檢測儀和經緯儀同步通信程序開發中的應用為例,論述了如何通過共享事件來實現應用程序和設備驅動程
    發表于 08-24 10:02 ?16次下載

    Win32多線程同步技術淺析

    簡要介紹了在Win32環境多線程訪問共享資源時的同步機制,討論了主要的4種同步對象(臨界區、互斥元、事件、信號量),并描述了它們的優缺點,給出了使用Win32 API函數操控這4種對
    發表于 11-14 10:55 ?31次下載
    Win32<b class='flag-5'>多線程</b><b class='flag-5'>同步</b>技術淺析

    MFC多線程編程

    計算機上的上位機制作工具語言之MFC多線程編程
    發表于 09-01 14:55 ?0次下載

    Windows多線程編程入門講解

    計算機上的上位機制作工具語言之Windows多線程編程入門講解,感興趣的可以看看。
    發表于 09-01 15:27 ?0次下載

    你了解Linux內核的同步機制

    在現代操作系統里,同時間可能有多個內核執行流在執行,因此內核其實象多進程多線程編程樣也需要同步機制
    發表于 05-12 08:26 ?633次閱讀

    linux多線程機制-線程同步

    運行的線 程,并且要使用同個緩沖區進行數據交換,因此必須利用機制進行同步。通過上面的例子我們可以看到,多線程的最大好處是,除堆棧之外,
    發表于 04-02 14:42 ?458次閱讀

    Linux多線程編程

    接口,稱為pthread。編寫Linux多線程程序,需要使用頭文件pthread.h,連接時需要使用庫libpthread.a。順便說一下,Linuxpthread的實現是通過系
    發表于 04-02 14:43 ?605次閱讀

    Linux內核的同步機制

    在現代操作系統里,同時間可能有多個內核執行流在執行,因此內核其實像多進程多線程編程樣也需要同步機制
    的頭像 發表于 09-22 09:46 ?2284次閱讀
    Linux內核的<b class='flag-5'>同步機制</b>

    Linux中多線程編程的知識點

    Hello、Hello大家好,我是木榮,今天我們繼續來聊聊Linux中多線程編程中的重要知識點,詳細談談多線程同步和互斥
    發表于 04-26 17:27 ?599次閱讀
    Linux中<b class='flag-5'>多線程</b>編程的知識點

    labview AMC多線程

    labview_AMC多線程
    發表于 08-21 10:31 ?32次下載

    如何使用pthread_barrier_xxx系列函數來實現多線程之間的同步?

    在Linux系統中提供了多種同步機制,本文主要講講如何使用pthread_barrier_xxx系列函數來實現多線程之間進行同步的方法。
    的頭像 發表于 10-23 14:43 ?1047次閱讀
    如何使用pthread_barrier_xxx系列函數來實現<b class='flag-5'>多線程</b>之間的<b class='flag-5'>同步</b>?

    多線程同步的幾種方法

    多線程同步是指在多個線程并發執行的情況,為了保證線程執行的正確性和致性,需要采用特定的方法來
    的頭像 發表于 11-17 14:16 ?1167次閱讀

    多線程如何保證數據的同步

    。本文將詳細介紹多線程數據同步的概念、問題、以及常見的解決方案。 、多線程數據同步概念 在
    的頭像 發表于 11-17 14:22 ?1222次閱讀
    主站蜘蛛池模板: 亚洲不卡视频在线观看| 亚洲一区二区三区乱码在线欧洲| 久久国产乱子伦免费精品 | 国产成人精品免费视频软件| 18禁在线无遮挡羞羞漫画| 综合久久伊人| 97成人碰碰在线人妻少妇| 99久久久无码国产精品AAA| caoporon超碰在线视频| 超碰在线视频地址| 久久久久久天天夜夜天天 | 岛国大片在线播放免费| 国产电影午夜成年免费视频| 国产精品自在自线亚洲| 极品少妇小泬50PTHEPON| 两百磅美女| 日韩精品卡1卡2三卡四卡乱码| 午夜精品久久久内射近拍高清| 亚洲欧洲一级| 阿片在线播放| 国内精品久久久久久久999下| 久久激情网| 四虎免费影院| 91精品国产色综合久久不| 动漫H片在线播放免费高清| 黑人寄宿羽月希产后奶水| 欧美一道本一区二区三区| 青青青青草| 美国女孩毛片| 男人插曲女人下生免费大全| 暖暖免费观看日本在线视频| 女子初尝黑人巨嗷嗷叫| 刘梓晨啪啪啪| 欧美日韩永久久一区二区三区| 老师xxxx69动漫| 欧美午夜精品一区二区蜜桃| 无码爽死成人777在线观看网站| 一区二区中文字幕在线观看| 国产成人精品免费视频下载| 暖暖视频免费观看社区| 樱花草在线观看影院|