999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種實時監(jiān)控系統(tǒng)數(shù)據(jù)同步問題的改進方法

2011-12-31 00:00:00謝玲郭昭烽
科技創(chuàng)新導(dǎo)報 2011年15期

摘 要:針對實時數(shù)據(jù)監(jiān)控系統(tǒng)普遍存在的數(shù)據(jù)同步問題提出改進方法,利用Windows內(nèi)核對象的特性編程設(shè)計了共享鎖類,并與未使用鎖、使用互斥鎖兩種情況進行時序比較,結(jié)果表明共享鎖在同步數(shù)據(jù)和優(yōu)先保證寫者效率方面具有明顯的優(yōu)越性。這些特性使共享鎖在工業(yè)控制級別的實時軟件系統(tǒng)中具有重要的現(xiàn)實意義。

關(guān)鍵詞:數(shù)據(jù)同步共享鎖實時數(shù)據(jù)監(jiān)控

中圖分類號:TM73文獻標識碼:A文章編號:1674-098X(2011)05(c)-0018-01

1 引言

在工控組態(tài)軟件領(lǐng)域,普遍存在一個稱作讀者寫者的問題,即對某些資源的訪問,存在兩種可能的情況,一種訪問必須是排他的,稱作寫操作;另一種訪問可以是共享的,稱為讀操作。對于一個實時數(shù)據(jù)監(jiān)控系統(tǒng)來說,由于Windows是一個多任務(wù)搶占式的操作系統(tǒng),在多個線程共同訪問一個數(shù)據(jù)區(qū)的環(huán)境下,會產(chǎn)生數(shù)據(jù)同步的問題。比如:有提供數(shù)據(jù)的服務(wù)程序A和若干界面顯示程序B、C、D等。服務(wù)程序和顯示程序共同使用一塊數(shù)據(jù)內(nèi)存區(qū)E,其中服務(wù)程序負責(zé)更新內(nèi)存數(shù)據(jù)(寫操作),而顯示程序則定時訪問內(nèi)存區(qū)數(shù)據(jù)(讀操作)。假設(shè)數(shù)據(jù)內(nèi)存區(qū)E中變量的數(shù)據(jù)結(jié)構(gòu)為:

FILETIMEftTime;//時間

DWORD dwValue;//值

那么,在B剛讀取完某個變量的ftTime值后,插入了A的寫操作,這時候再讀取到的dwValue值就和ftTime不一致了。這種不一致的現(xiàn)象必須通過數(shù)據(jù)同步來避免。所以,對內(nèi)存區(qū)E的讀寫訪問必須作以下兩個約束:

1)A正在進行寫操作時,B、C、D必須等待該操作完成才能訪問E;約束條件(1)

2)B、C、D正在訪問E時,A 必須等待該操作完成才對E進行寫操作;約束條件(2)

以上約束可以簡單的歸納為:讀寫互斥。

2 一般解決方法

在Windows下,系統(tǒng)提供了事件、互斥量、信號量等核心對象以及一些等待函數(shù)來進行多線程同步。單獨使用這些核心對象均能夠?qū)崿F(xiàn)讀寫的互斥。

但是單純的實現(xiàn)讀寫互斥并不能完全滿足實時監(jiān)控系統(tǒng)對訪問效率的要求。因為讀操作的并發(fā)并不會引起數(shù)據(jù)的不同步,為了提高效率,必須在之前的兩個約束的基礎(chǔ)上增加讀寫訪問的另一約束,即約束(3):B、C、D能夠同時訪問E。

3 共享鎖

3.1 數(shù)據(jù)結(jié)構(gòu)

利用Windows內(nèi)核對象的特性,可以編程實現(xiàn)滿足上述三點約束條件的共享鎖類。

共享鎖的內(nèi)部數(shù)據(jù)結(jié)構(gòu)由讀事件、寫事件、互斥對象和讀者計數(shù)組成。

其中,讀、寫事件是一對命名的、手動重置的事件,初始化為有信號狀態(tài)。事件可以使用Windows Api函數(shù)CreateEvent、ResetEvent和SetEvent 來創(chuàng)建、重置和置位。這對事件成員的作用是實現(xiàn)讀寫的互斥。

共享鎖中的互斥對象是一個初始化無所有者的命名互斥量。互斥量可以使用CreateMutex、WaitForSingleObject和ReleaseMutex來創(chuàng)建、進入和離開?;コ鈱ο笤诠蚕礞i中的作用有兩個:對寫操作進行保護,保證一個時刻內(nèi)只有一個線程在進行寫操作;在多個讀線程中保護讀者計數(shù),保證所有讀線程中對讀者計數(shù)的操作都是原子操作。

讀者計數(shù)實際上是一片命名的內(nèi)存區(qū),可以用CreateFileMapping和MapViewOfFile來創(chuàng)建和映射該內(nèi)存區(qū)。讀者計數(shù)用于對同一時刻內(nèi)的并發(fā)讀操作進行管理。

3.2 讀寫操作流程

3.2.1 寫操作

數(shù)據(jù)服務(wù)A在對數(shù)據(jù)內(nèi)存區(qū)E進行寫數(shù)據(jù)操作時,首先重置寫事件。這時候?qū)懯录闊o信號狀態(tài),這就意味著B、C、D等讀線程將在“等待 寫”這一步中掛起,不再進行讀操作。接下來A將等待讀事件,如果之前時刻已經(jīng)有若干線程在進行讀操作,那么A將等到這些操作完成后進入互斥對象。這就意味著A已經(jīng)獨占了內(nèi)存區(qū)E這塊資源,可以放心地進行寫操作了。

在A完成寫操作后,首先離開互斥對象,釋放之前獨享的這塊資源,再置位寫事件,讓B、C、D等讀線程結(jié)束掛起狀態(tài),進行讀操作。

3.2.2 讀操作

假設(shè)B線程某一時刻想以讀者的身份訪問數(shù)據(jù)區(qū),B首先等待寫事件,如果寫操作正在進行,那么B將被掛起直到寫操作完成。接下來B將訪問讀者計數(shù),如果讀者計數(shù)為0,B將重置讀事件;否則意味著在前一時刻已經(jīng)有另外的讀者(C或者D)已經(jīng)重置了讀事件,B將讀者計數(shù)自增后直接進入讀操作。當(dāng)然,在訪問讀者計數(shù)的整個過程中都使用互斥對象對計數(shù)進行保護。

在完成讀操作后,B再次訪問讀者計數(shù)字,如果發(fā)現(xiàn)此時B已經(jīng)是最后一位讀者(計數(shù)=1),B將置位讀事件,計數(shù)自減后退出。

4 比較和結(jié)果

4.1 實驗平臺的搭建

創(chuàng)建一個寫者線程,三個讀者線程,同時運行。在每個線程內(nèi),記錄下每次操作的性質(zhì)(讀或?qū)?、操作時間和操作者(線程),保存到日記文件中,是為原始數(shù)據(jù)。分三次進行實驗:1無數(shù)據(jù)同步;2使用互斥對象進行數(shù)據(jù)同步;3使用文中所述共享鎖進行數(shù)據(jù)同步。

4.2 比較和結(jié)果

未使用鎖情況下,由于Windows是搶占式的操作系統(tǒng),A、B、C、D四個進程將對E資源進行無序的競爭。

使用了互斥鎖情況下,在B、C、D的讀周期內(nèi)不可能再出現(xiàn)值被A修改的情況。但是這樣的數(shù)據(jù)同步的缺陷也是明顯的:在B的讀周期內(nèi)A、C和D都在掛起等待狀態(tài),消耗了不必要的時間;另外,在這樣的數(shù)據(jù)同步模式下,讀者和寫者的地位是平等的,A作為數(shù)據(jù)的提供者卻必須要和B、C、D同等的去搶占資源,而且讀者越多負擔(dān)越重,是一種很不合理的作法。同樣,在B、C、D的讀周期內(nèi)數(shù)據(jù)不會被A改動,解決了數(shù)據(jù)同步的問題。另外,B、C、D可以并發(fā)進行,因為多個讀者訪問不會對資源E造成破壞,避免了A不必要的等待時間,提高了效率。

更重要的是,共享鎖對讀者和寫者的權(quán)限進行了區(qū)分:寫者優(yōu)先于讀者訪問共享資源。這是因為任意時刻下A想對資源E進行寫操作時都會重置寫事件,這時試圖進行讀操作的其他讀者就被迫進入等待狀態(tài),A只需要等待前一時刻已經(jīng)進入讀周期的進程完成操作。這就保證了服務(wù)程序A的工作效率,也就是保證數(shù)據(jù)的實時性。

5 結(jié)語

綜上所述,共享鎖具有同步數(shù)據(jù)和優(yōu)先保證寫者效率的工作特性。這些獨特的工作使得這樣的共享鎖在工業(yè)控制級別的實時軟件系統(tǒng)中具有很重要的現(xiàn)實意義。在實時數(shù)據(jù)庫、實時監(jiān)控系統(tǒng)、數(shù)據(jù)報警系統(tǒng)等領(lǐng)域的軟件開發(fā)中具有廣泛的應(yīng)用前景。

參考文獻

[1]Jeffrey Richter. Windows核心編程[M].北京:機械工業(yè)出版社,2008,5.

主站蜘蛛池模板: 久久天天躁狠狠躁夜夜躁| 色悠久久久| 天天色天天操综合网| 亚洲免费播放| 亚洲精品无码高潮喷水A| 九九这里只有精品视频| 久久久久国产精品熟女影院| 无遮挡国产高潮视频免费观看| 精品无码一区二区三区电影| 中国毛片网| 国产麻豆永久视频| 久久精品66| 免费一级毛片完整版在线看| 婷婷午夜天| 国产午夜精品一区二区三| 国产区网址| 亚洲精品男人天堂| 日韩中文字幕亚洲无线码| 久久精品免费看一| 狠狠色丁香婷婷| 欧美精品三级在线| 2021国产v亚洲v天堂无码| AⅤ色综合久久天堂AV色综合| 98超碰在线观看| 无码中文字幕精品推荐| 在线网站18禁| 在线国产欧美| 国产女人18毛片水真多1| 久久精品一品道久久精品| 国产在线精品网址你懂的| 伊人久久大线影院首页| 99久久国产自偷自偷免费一区| 亚洲天堂日本| 九九九精品成人免费视频7| 久久精品视频亚洲| 丰满人妻中出白浆| 2020极品精品国产 | 2021亚洲精品不卡a| 1769国产精品视频免费观看| 亚洲色无码专线精品观看| 国产三级精品三级在线观看| 欧美精品导航| 日韩专区欧美| 黄色片中文字幕| 日本精品αv中文字幕| 综合五月天网| 性视频一区| 色综合激情网| 亚洲欧美日韩高清综合678| 久久不卡国产精品无码| 黄色网站不卡无码| 色综合色国产热无码一| 精品国产成人高清在线| 国产一级视频在线观看网站| 国产va欧美va在线观看| 欧美精品伊人久久| 国产自无码视频在线观看| 亚洲欧美日韩综合二区三区| 欧美五月婷婷| 91午夜福利在线观看| 亚洲三级片在线看| 欧美激情网址| 亚洲福利一区二区三区| 国产内射在线观看| 久久精品这里只有国产中文精品 | 中文字幕欧美成人免费| 久久国产亚洲偷自| 国产jizzjizz视频| 国产制服丝袜91在线| 日本在线国产| 蜜桃臀无码内射一区二区三区| 国产无码高清视频不卡| 日韩精品一区二区三区大桥未久| 嫩草国产在线| 国产精品久久久久久久久kt| 亚洲福利视频一区二区| 九九线精品视频在线观看| 欧美亚洲激情| 国产乱人免费视频| 热伊人99re久久精品最新地| 亚洲狼网站狼狼鲁亚洲下载| 欧美不卡在线视频|