解決方案
Semaphore 是一種用來限制可以同時取用共享 (受保護) 資源的 task 數量的方法。受保護的資源或關鍵程式區塊可能包括寫入全域變數或與外部儀器通訊。您可以使用 Semaphore 使您的程式碼 thread-safe,並避免競賽效應。Semaphore 類似於其他程式語言中的 mutex (Mutual exclusion)。
它對於保護不應被同時呼叫的兩個或多個關鍵程式碼片段很有用。在進入關鍵程式片段之前,執行序必須取得 Semaphore。如果關鍵程式片段中沒有執行序,則執行序會立即進入該程式片段。一旦關鍵程式片段執行完畢,該執行序必須釋放 Semaphore。其他想要進入該關鍵程式片段的執行序必須等到第一個執行序釋放 Semaphore。
圖1:Semaphore Palette 中的 VI (
Programming»
Synchronization»
Semaphore)
為此,建立一個 Semaphore,然後分別在每個關鍵程式片段的開始和結束放置 Acquire Semaphore 和 Release Semaphore VI。因此,一次只能有一個 subVI 可以獲得並釋放 Semaphore,以確保資料正確。在 subVI 結束之前使用 Release Semaphore Reference VI 並停止 subVI。