摘 要:針對實時數據監控系統普遍存在的數據同步問題提出改進方法,利用Windows內核對象的特性編程設計了共享鎖類,并與未使用鎖、使用互斥鎖兩種情況進行時序比較,結果表明共享鎖在同步數據和優先保證寫者效率方面具有明顯的優越性。這些特性使共享鎖在工業控制級別的實時軟件系統中具有重要的現實意義。
關鍵詞:數據同步共享鎖實時數據監控
中圖分類號:TM73文獻標識碼:A文章編號:1674-098X(2011)05(c)-0018-01
1 引言
在工控組態軟件領域,普遍存在一個稱作讀者寫者的問題,即對某些資源的訪問,存在兩種可能的情況,一種訪問必須是排他的,稱作寫操作;另一種訪問可以是共享的,稱為讀操作。對于一個實時數據監控系統來說,由于Windows是一個多任務搶占式的操作系統,在多個線程共同訪問一個數據區的環境下,會產生數據同步的問題。比如:有提供數據的服務程序A和若干界面顯示程序B、C、D等。服務程序和顯示程序共同使用一塊數據內存區E,其中服務程序負責更新內存數據(寫操作),而顯示程序則定時訪問內存區數據(讀操作)。假設數據內存區E中變量的數據結構為:
FILETIMEftTime;//時間
DWORD dwValue;//值
那么,在B剛讀取完某個變量的ftTime值后,插入了A的寫操作,這時候再讀取到的dwValue值就和ftTime不一致了。這種不一致的現象必須通過數據同步來避免。所以,對內存區E的讀寫訪問必須作以下兩個約束:
1)A正在進行寫操作時,B、C、D必須等待該操作完成才能訪問E;約束條件(1)
2)B、C、D正在訪問E時,A 必須等待該操作完成才對E進行寫操作;約束條件(2)……p>