亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

多線程之間訪問共享數(shù)據(jù)的方法及裝置制造方法

文檔序號:6627464閱讀:243來源:國知局
多線程之間訪問共享數(shù)據(jù)的方法及裝置制造方法
【專利摘要】本發(fā)明提供一種多線程之間訪問共享數(shù)據(jù)的方法及裝置,其中的方法包括,在當(dāng)前的共享數(shù)據(jù)塊中新增控制結(jié)構(gòu)和全局指針變量,全局指針變量通過控制結(jié)構(gòu)指向當(dāng)前的共享數(shù)據(jù)塊;在更新共享數(shù)據(jù)時(shí),新建共享數(shù)據(jù)塊,采用修改全局指針變量賦值的方式使全局指針變量指向新建的共享數(shù)據(jù)塊;封裝多個(gè)線程;使封裝的線程通過全局指針變量讀取共享數(shù)據(jù)塊中的共享數(shù)據(jù)。利用本發(fā)明提供的多線程之間訪問共享數(shù)據(jù)的方法及裝置,通過將轉(zhuǎn)發(fā)線程對復(fù)雜的共享數(shù)據(jù)的訪問轉(zhuǎn)換成對簡單變量的訪問,從而代替轉(zhuǎn)發(fā)線程以鎖機(jī)制的方式訪問復(fù)雜的共享數(shù)據(jù),能夠有效避免轉(zhuǎn)發(fā)線程訪問共享數(shù)據(jù)時(shí)弓I起線程阻塞。
【專利說明】多線程之間訪問共享數(shù)據(jù)的方法及裝置

【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及多線程訪問共享數(shù)據(jù)的【技術(shù)領(lǐng)域】,更為具體地,涉及一種多線程之間 訪問共享數(shù)據(jù)的方法及裝置。

【背景技術(shù)】
[0002] 隨著cpu多核技術(shù)的發(fā)展和操作系統(tǒng)的支持,多線程編程已被廣泛應(yīng)用到各種領(lǐng) 域的計(jì)算機(jī)軟件實(shí)現(xiàn)中。多線程架構(gòu)模式是目前業(yè)界被廣泛使用的一種LINUX系統(tǒng)下的用 戶態(tài)程序架構(gòu),目前在防火墻產(chǎn)品的網(wǎng)絡(luò)收發(fā)包系統(tǒng)中也應(yīng)用了這種架構(gòu)模式,其軟件結(jié) 構(gòu)如圖1所示,系統(tǒng)運(yùn)行期間,通常創(chuàng)建一個(gè)配置線程負(fù)責(zé)寫入數(shù)據(jù),同時(shí)會存在多個(gè)并行 運(yùn)行的轉(zhuǎn)發(fā)線程,動態(tài)的獲取最新的配置數(shù)據(jù)。對于上述軟件結(jié)構(gòu),配置線程隨時(shí)可寫入 配置數(shù)據(jù)(共享數(shù)據(jù)),轉(zhuǎn)發(fā)線程可隨時(shí)獲取到配置數(shù)據(jù),尤其是在類似處理網(wǎng)絡(luò)報(bào)文轉(zhuǎn)發(fā) 的、實(shí)時(shí)性要求較高的系統(tǒng)中,讀寫過程需要盡量在做到互不影響每個(gè)線程各自的處理流 程。顯然傳統(tǒng)多線程架構(gòu)模式下對共享數(shù)據(jù)的處理限制不能滿足上述需求,必須對其進(jìn)行 改進(jìn),以達(dá)到能夠?qū)崟r(shí)讀寫大塊共享數(shù)據(jù)的要求。
[0003] 由于是多個(gè)轉(zhuǎn)發(fā)線程之間對配置數(shù)據(jù)進(jìn)行訪問,為避免數(shù)據(jù)讀寫的混亂,傳統(tǒng)的 解決方法是,在轉(zhuǎn)發(fā)線程讀寫數(shù)據(jù)的前后對其進(jìn)行加解鎖的操作,以保證各方能互斥的訪 問該塊數(shù)據(jù)。但實(shí)際情況是,當(dāng)一個(gè)轉(zhuǎn)發(fā)線程加鎖成功后,其它轉(zhuǎn)發(fā)線程只能阻塞在這個(gè)鎖 上,而我們的配置數(shù)據(jù)量較大且數(shù)據(jù)結(jié)構(gòu)復(fù)雜,這樣就會導(dǎo)致加鎖時(shí)間較長,其它轉(zhuǎn)發(fā)線程 阻塞的時(shí)間也會長。由于防火墻設(shè)備處于網(wǎng)絡(luò)的中間節(jié)點(diǎn),理論上要求轉(zhuǎn)發(fā)線程處理網(wǎng)路 報(bào)文收發(fā)的時(shí)延越短越好,因此應(yīng)該盡量避免使用可能導(dǎo)致線程阻塞的機(jī)制,傳統(tǒng)方法明 顯不可行。
[0004] 對傳統(tǒng)解決方法稍加改進(jìn),采用細(xì)化鎖粒度的方法,即將傳統(tǒng)的用于整塊配置數(shù) 據(jù)的大鎖分解,拆開成多個(gè)更小粒度的小鎖,以縮短每次加鎖的時(shí)間,但對于復(fù)雜的配置數(shù) 據(jù)結(jié)構(gòu),細(xì)化成小鎖的設(shè)計(jì)和實(shí)現(xiàn)也會相應(yīng)的復(fù)雜很多,況且改進(jìn)后的實(shí)現(xiàn)機(jī)制在舊理上 也有鎖的存在,也會造成轉(zhuǎn)發(fā)線程的阻塞,未必會滿足轉(zhuǎn)發(fā)線程在性能上的要求。
[0005] 對于上述兩種方法,會想到Linux系統(tǒng)下有一種非阻塞鎖的機(jī)制,如果當(dāng)前鎖被 占用,那么想加鎖的另一方則嘗試加鎖時(shí)會立即返回失敗,線程可以繼續(xù)運(yùn)行,這樣就避免 了線程阻塞在加鎖操作上。但這會帶來另一方面的問題,即轉(zhuǎn)發(fā)線程在讀取配置數(shù)據(jù)之前 加鎖失敗時(shí)處于沒有配置數(shù)據(jù)的狀態(tài),此時(shí)需要在每個(gè)轉(zhuǎn)發(fā)線程中持續(xù)保留一份舊的配置 數(shù)據(jù),以便在讀取最新配置數(shù)據(jù)失敗時(shí)使用,這必然會浪費(fèi)大量的內(nèi)存,而且在轉(zhuǎn)發(fā)線程加 鎖期間,也需要有將最新的配置數(shù)據(jù)更新到本地保留的配置數(shù)據(jù)的處理,不僅鎖的粒度較 大,而且加鎖時(shí)間也較長,會影響到配置線程更新配置數(shù)據(jù)及其它轉(zhuǎn)發(fā)線程讀取最新配置 數(shù)據(jù)的及時(shí)性。
[0006] 而拋開鎖機(jī)制,是利用數(shù)據(jù)庫系統(tǒng)共享配置數(shù)據(jù)的方式,即配置線程將配置數(shù)據(jù) 更新到數(shù)據(jù)庫中,各轉(zhuǎn)發(fā)線程需要配置時(shí),直接從數(shù)據(jù)庫中讀取,利用數(shù)據(jù)庫系統(tǒng)本身對并 發(fā)訪問的支持解決多個(gè)轉(zhuǎn)發(fā)線程之間共享配置數(shù)據(jù)的問題。但該方法需要在現(xiàn)有的系統(tǒng)中 引入數(shù)據(jù)庫模塊,重新設(shè)計(jì)配置數(shù)據(jù)的邏輯結(jié)構(gòu)以及在數(shù)據(jù)庫中的存儲結(jié)構(gòu),這樣不僅修 改量大,而且對于數(shù)據(jù)庫的更新及查詢也會對系統(tǒng)性能帶來一定的影響。
[0007] 為了避免鎖機(jī)制,還有一種通用的技術(shù),通過本地socket通訊在不同轉(zhuǎn)發(fā)線程之 間傳遞共享數(shù)據(jù),但我們的配置數(shù)據(jù)不僅數(shù)據(jù)量較大,而且其數(shù)據(jù)存儲結(jié)構(gòu)中包含多級鏈 表,如果要使用socket通訊傳遞,則必須要在發(fā)送方將多級的結(jié)構(gòu)轉(zhuǎn)換成線性結(jié)構(gòu),然后 接收方再將線性結(jié)構(gòu)還原成多級結(jié)構(gòu),這種轉(zhuǎn)換過程明顯增加了程序?qū)崿F(xiàn)的復(fù)雜性,也會 對處理性能帶來較大的影響。
[0008] 綜上所述,現(xiàn)有的技術(shù)或方案都存在一定的缺陷,無法解決多個(gè)轉(zhuǎn)發(fā)線程阻塞的 問題,因此,需要一種全新的能夠讓多個(gè)轉(zhuǎn)發(fā)線程無阻賽訪問復(fù)雜的配置數(shù)據(jù)的技術(shù)方案。


【發(fā)明內(nèi)容】

[0009] 鑒于上述問題,本發(fā)明的目的是提供一種多線程之間訪問共享數(shù)據(jù)的方法及裝 置,以解決多個(gè)轉(zhuǎn)發(fā)線程采用鎖機(jī)制并行訪問共享數(shù)據(jù),導(dǎo)致多個(gè)轉(zhuǎn)發(fā)線程阻塞的問題。 [0010] 本發(fā)明提供的多線程之間訪問共享數(shù)據(jù)的方法,包括共享數(shù)據(jù)更新階段和共享數(shù) 據(jù)讀取階段;其中,
[0011] 共享數(shù)據(jù)更新階段,包括:
[0012] 在當(dāng)前的共享數(shù)據(jù)塊中新增控制結(jié)構(gòu)和全局指針變量;其中,控制結(jié)構(gòu)用于訪問 共享數(shù)據(jù)塊中的共享數(shù)據(jù);全局指針變量通過控制結(jié)構(gòu)指向當(dāng)前的共享數(shù)據(jù)塊;
[0013] 在更新共享數(shù)據(jù)時(shí),新建共享數(shù)據(jù)塊;修改全局指針變量的賦值,使全局指針變量 通過控制結(jié)構(gòu)從指向當(dāng)前的共享數(shù)據(jù)塊變?yōu)橹赶蛐陆ǖ墓蚕頂?shù)據(jù)塊;
[0014] 共享數(shù)據(jù)讀取階段,包括:
[0015] 封裝多個(gè)線程;
[0016] 封裝后的多個(gè)線程通過全局指針變量讀取全局指針變量指向的共享數(shù)據(jù)塊中的 共享數(shù)據(jù)。
[0017] 本發(fā)明提供的多線程之間訪問共享數(shù)據(jù)的裝置,包括:
[0018] 控制結(jié)構(gòu)新增單元,用于在當(dāng)前的共享數(shù)據(jù)塊中新增控制結(jié)構(gòu),控制結(jié)構(gòu)用于訪 問共享數(shù)據(jù)塊中的共享數(shù)據(jù);
[0019] 全局指針變量新增單元,用于在當(dāng)前的共享數(shù)據(jù)塊中新增全局指針變量,全局指 針變量通過控制結(jié)構(gòu)指向當(dāng)前的共享數(shù)據(jù)塊;
[0020] 共享數(shù)據(jù)塊新建單元,用于在更新共享數(shù)據(jù)時(shí),新建共享數(shù)據(jù)塊;
[0021] 指針指向改變單元,用于通過修改全局指針變量的賦值,使全局指針變量通過控 制結(jié)構(gòu)從指向當(dāng)前的共享數(shù)據(jù)塊變?yōu)橹赶蛐陆ǖ墓蚕頂?shù)據(jù)塊;
[0022] 線程封裝單元,用于封裝多個(gè)線程;
[0023] 共享數(shù)據(jù)讀取單元,用于使封裝后的多個(gè)線程通過全局指針變量讀取全局指針變 量指向的共享數(shù)據(jù)塊中的共享數(shù)據(jù)。
[0024] 利用上述根據(jù)本發(fā)明提供的多線程之間訪問共享數(shù)據(jù)的方法及裝置,通過將轉(zhuǎn)發(fā) 線程對復(fù)雜的共享數(shù)據(jù)的訪問轉(zhuǎn)換成對簡單變量的訪問,從而代替轉(zhuǎn)發(fā)線程以鎖機(jī)制的方 式訪問復(fù)雜的共享數(shù)據(jù),能夠有效避免轉(zhuǎn)發(fā)線程訪問共享數(shù)據(jù)時(shí)引起線程阻塞。
[0025] 為了實(shí)現(xiàn)上述以及相關(guān)目的,本發(fā)明的一個(gè)或多個(gè)方面包括后面將詳細(xì)說明并在 權(quán)利要求中特別指出的特征。下面的說明以及附圖詳細(xì)說明了本發(fā)明的某些示例性方面。 然而,這些方面指示的僅僅是可使用本發(fā)明的舊理的各種方式中的一些方式。此外,本發(fā)明 旨在包括所有這些方面以及它們的等同物。

【專利附圖】

【附圖說明】
[0026] 通過參考以下結(jié)合附圖的說明及權(quán)利要求書的內(nèi)容,并且隨著對本發(fā)明的更全面 理解,本發(fā)明的其它目的及結(jié)果將更加明白及易于理解。在附圖中:
[0027] 圖1為多線程架構(gòu)示意圖;
[0028] 圖2為根據(jù)本發(fā)明實(shí)施例的多線程之間訪問共享數(shù)據(jù)的方法的流程示意圖;
[0029] 圖3為根據(jù)本發(fā)明實(shí)施例的轉(zhuǎn)發(fā)線程讀取共享數(shù)據(jù)的流程示意圖;
[0030] 圖4為根據(jù)本發(fā)明實(shí)施例的資源回收超時(shí)機(jī)制的流程示意圖;
[0031] 圖5為根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)交互示意圖;
[0032] 圖6為根據(jù)本發(fā)明實(shí)施例的多線程之間訪問共享數(shù)據(jù)的裝置的邏輯結(jié)構(gòu)示意圖;
[0033] 圖7為根據(jù)本發(fā)明實(shí)施例的多線程之間訪問共享數(shù)據(jù)的裝置的一個(gè)具體實(shí)施方 式的邏輯結(jié)構(gòu)示意圖。
[0034] 在所有附圖中相同的標(biāo)號指示相似或相應(yīng)的特征或功能。

【具體實(shí)施方式】
[0035] 在下面的描述中,出于說明的目的,為了提供對一個(gè)或多個(gè)實(shí)施例的全面理解,闡 述了許多具體細(xì)節(jié)。然而,很明顯,也可以在沒有這些具體細(xì)節(jié)的情況下實(shí)現(xiàn)這些實(shí)施例。 在其它例子中,為了便于描述一個(gè)或多個(gè)實(shí)施例,公知的結(jié)構(gòu)和設(shè)備以方框圖的形式示出。
[0036] 現(xiàn)有技術(shù)中,轉(zhuǎn)發(fā)線程并行訪問共享數(shù)據(jù)是以鎖機(jī)制的方式進(jìn)行訪問的,容易引 起轉(zhuǎn)發(fā)線程間的阻塞,為了實(shí)現(xiàn)轉(zhuǎn)發(fā)線程對共享數(shù)據(jù)的無鎖訪問機(jī)制,本發(fā)明利用操作系 統(tǒng)的原子操作機(jī)制,即對簡單變量的賦值和讀取操作都是原子性的,將轉(zhuǎn)發(fā)線程對共享數(shù) 據(jù)的訪問過程轉(zhuǎn)化成原子操作,以保證轉(zhuǎn)發(fā)線程讀寫共享數(shù)據(jù)過程的時(shí)序不會出現(xiàn)錯(cuò)亂, 因此,轉(zhuǎn)發(fā)線程可以采用原子性的操作方式代替鎖機(jī)制的方式完成讀寫共享數(shù)據(jù)的工作, 轉(zhuǎn)發(fā)線程不采用鎖機(jī)制訪問共享數(shù)據(jù)也就不會造成轉(zhuǎn)發(fā)線程間的阻塞。
[0037] 由于在C語言中簡單變量的操作(如賦值、讀取)都是原子性的,因此,本發(fā)明將 C語言中簡單變量的操作應(yīng)用到對共享數(shù)據(jù)的處理中,改變現(xiàn)有的共享數(shù)據(jù)結(jié)構(gòu)。
[0038] 需要說明的是,共享數(shù)據(jù)等同于配置數(shù)據(jù),線程等同于轉(zhuǎn)發(fā)線程,多線程也就是多 個(gè)轉(zhuǎn)發(fā)線程。
[0039] 以下將結(jié)合附圖對本發(fā)明的具體實(shí)施例進(jìn)行詳細(xì)描述。
[0040] 圖2示出了根據(jù)本發(fā)明實(shí)施例的多線程之間訪問共享數(shù)據(jù)的方法的流程。
[0041] 如圖2所示,本發(fā)明實(shí)施例提供的根據(jù)本發(fā)明實(shí)施例的多線程之間訪問共享數(shù)據(jù) 的方法,包括共享數(shù)據(jù)更新階段和共享數(shù)據(jù)讀取階段,其中,
[0042] 在共享數(shù)據(jù)更新階段中,包括:
[0043] 步驟S201 :在當(dāng)前的共享數(shù)據(jù)塊中新增控制結(jié)構(gòu)和全局指針變量;其中,控制結(jié) 構(gòu)用于訪問共享數(shù)據(jù)塊中的共享數(shù)據(jù);全局指針變量通過控制結(jié)構(gòu)指向當(dāng)前的共享數(shù)據(jù) 塊。
[0044] 共享數(shù)據(jù)塊中的共享數(shù)據(jù)是以多層結(jié)構(gòu)的形式組成的,每一層結(jié)構(gòu)包括多張表, 由于在后續(xù)步驟中需要指針變量指向共享數(shù)據(jù)塊中的表,而指針變量無法同時(shí)指向多張 表,所以需要在共享數(shù)據(jù)塊中增加一層控制結(jié)構(gòu),用來訪問共享數(shù)據(jù)塊中的多張表。
[0045] 轉(zhuǎn)發(fā)線程會通過全局指針變量指向該控制結(jié)構(gòu)訪問共享數(shù)據(jù)塊中的多張表,也就 是讀取共享數(shù)據(jù)塊中的共享數(shù)據(jù),在為了方便表述,將全局指針變量通過控制結(jié)構(gòu)指向共 享數(shù)據(jù)塊簡稱為全局指針變量指向共享數(shù)據(jù)塊。
[0046] 步驟S201為更新共享數(shù)據(jù)的預(yù)處理階段,用于改變共享數(shù)據(jù)的結(jié)構(gòu)。
[0047] 步驟S202 :在更新共享數(shù)據(jù)時(shí),新建共享數(shù)據(jù)塊;修改全局指針變量的賦值,使全 局指針變量通過控制結(jié)構(gòu)從指向當(dāng)前的共享數(shù)據(jù)塊變?yōu)橹赶蛐陆ǖ墓蚕頂?shù)據(jù)塊;并清除全 局指針變量舊指向的共享數(shù)據(jù)塊。
[0048] 在新建共享數(shù)據(jù)塊后,通過修改全局指針變量的值,將全局指針變量從指向舊的 共享數(shù)據(jù)塊變?yōu)橹赶蛐陆ǖ墓蚕頂?shù)據(jù)塊,轉(zhuǎn)發(fā)線程從讀取全局指針變量舊指向的共享數(shù)據(jù) 塊中的共享數(shù)據(jù)變?yōu)樽x取全局指針變量新指向的共享數(shù)據(jù)塊中的共享數(shù)據(jù)。
[0049] 在每次更新共享數(shù)據(jù)時(shí),都會創(chuàng)建新的共享數(shù)據(jù)塊,全局指針變量指向該新建的 共享數(shù)據(jù)塊,在更新完共享數(shù)據(jù)后,全局變量指針舊指向的共享數(shù)據(jù)塊便成為過期的共享 數(shù)據(jù)塊,不會再次用到,共享數(shù)據(jù)每更新一次,便會多出一個(gè)共享數(shù)據(jù)塊,這樣經(jīng)過多次更 新操作后,系統(tǒng)便會積累過多的過期的共享數(shù)據(jù)塊,在沒有配置更新的大多數(shù)場景下,為了 保證系統(tǒng)只有一個(gè)共享數(shù)據(jù)塊,因此需要一種回收共享數(shù)據(jù)塊的機(jī)制,及時(shí)釋放過期的共 享數(shù)據(jù)塊所占用的內(nèi)存資源。
[0050] 本發(fā)明提供的回收共享數(shù)據(jù)塊的機(jī)制為:
[0051] 在啟動配置線程時(shí),設(shè)置一個(gè)待回收資源池,用來存放過期的共享數(shù)據(jù)塊,在待回 收資源池回收過期的共享數(shù)據(jù)塊后,需要對待回收資源池進(jìn)行清理,具體地,清理待回收資 源池為清理待回收資源池內(nèi)的共享數(shù)據(jù)塊,及時(shí)釋放共享數(shù)據(jù)塊所占用的內(nèi)存資源。
[0052] 為保證待回收資源池中的共享數(shù)據(jù)塊及時(shí)得到清理,本發(fā)明選擇以下兩個(gè)時(shí)間清 理待回收資源池:
[0053] 第一時(shí)間:將全局指針變量舊指向的共享數(shù)據(jù)塊移入待回收資源池后立即清理一 次待回收資源池;
[0054] 第二時(shí)間:通過設(shè)置一個(gè)周期,定期清理待回收資源池,本發(fā)明優(yōu)選將轉(zhuǎn)發(fā)線程讀 取一次共享數(shù)據(jù)時(shí)的最長時(shí)間作為周期,每經(jīng)過一個(gè)周期,清理一次待回收資源池。以保證 第一時(shí)間共享數(shù)據(jù)塊所占用的未被釋放的內(nèi)存資源有機(jī)會再次釋放。
[0055] 在待回收資源池清理共享數(shù)據(jù)塊的過程中,具體地清理共享數(shù)據(jù)塊的過程為:根 據(jù)共享數(shù)據(jù)塊當(dāng)前的狀態(tài),判斷共享數(shù)據(jù)塊是否正在被轉(zhuǎn)發(fā)線程使用,如果共享數(shù)據(jù)塊正 在被轉(zhuǎn)發(fā)線程使用,需要待轉(zhuǎn)發(fā)線程使用完共享數(shù)據(jù)塊后,釋放共享數(shù)據(jù)塊所占用的內(nèi)存; 如果共享數(shù)據(jù)塊未被轉(zhuǎn)發(fā)線程使用,則不需要等待,直接釋放共享數(shù)據(jù)塊所占用的內(nèi)存。共 享數(shù)據(jù)塊的狀態(tài)是通過引用計(jì)數(shù)器的值確定的,引用計(jì)數(shù)器的值大于零,表示該共享數(shù)據(jù) 塊正在被轉(zhuǎn)發(fā)線程使用或即將被轉(zhuǎn)發(fā)線程使用,引用計(jì)數(shù)器的值等于零,表示該共享數(shù)據(jù) 塊當(dāng)前沒有被轉(zhuǎn)發(fā)線程使用,處于未被使用狀態(tài),只有未被使用的共享數(shù)據(jù)塊才可以立即 釋放其所占用的內(nèi)存資源。
[0056] 需要說明的是,在全局指針變量指向新建的共享數(shù)據(jù)塊后,立刻將舊指向的共享 數(shù)據(jù)塊移入待回收資源池,也就是說,每次更新共享數(shù)據(jù)塊后,新指向的共享數(shù)據(jù)塊會變成 舊指向的共享數(shù)據(jù)塊,立刻將其移入待回收資源池。
[0057] 上述內(nèi)容詳細(xì)說明了如何利用全局指針變量改變共享數(shù)據(jù)的結(jié)構(gòu),以及如何通過 全局指針變量更新共享數(shù)據(jù)塊中的共享數(shù)據(jù)的過程,在更新完共享數(shù)據(jù)后,需要轉(zhuǎn)發(fā)線程 讀取更新后的共享數(shù)據(jù),下面將對轉(zhuǎn)發(fā)線程讀取更新后的共享數(shù)據(jù)做詳細(xì)說明。
[0058] 在讀取共享數(shù)據(jù)階段中,包括:
[0059] 步驟S203 :封裝轉(zhuǎn)發(fā)線程讀取共享數(shù)據(jù)的接口。
[0060] 由于轉(zhuǎn)發(fā)線程可以不通過新增的全局指針變量讀到共享數(shù)據(jù),因此,本發(fā)明采用 封裝的方法將轉(zhuǎn)發(fā)線程讀取共享數(shù)據(jù)的操作封裝成統(tǒng)一接口,所有轉(zhuǎn)發(fā)線程只能調(diào)用該接 口讀取共享數(shù)據(jù)。
[0061] 步驟S204 :封裝后的接口通過全局指針變量讀取全局指針變量指向的共享數(shù)據(jù) 塊中的共享數(shù)據(jù);在某一時(shí)刻,全局指針變量指向的可能是舊共享數(shù)據(jù)塊,也可能是新建的 共享數(shù)據(jù)塊。
[0062] 在全局指針變量改變指向之前,轉(zhuǎn)發(fā)線程讀取到的是全局指針變量舊指向的共享 數(shù)據(jù)塊中的共享數(shù)據(jù),也就是更新前的共享數(shù)據(jù)塊中的共享數(shù)據(jù),在全局指針變量指向新 的共享數(shù)據(jù)塊之后,轉(zhuǎn)發(fā)線程讀取到的是新的共享數(shù)據(jù)塊中共享數(shù)據(jù),也就是更新后的共 享數(shù)據(jù)塊中的共享數(shù)據(jù),因此,轉(zhuǎn)發(fā)線程不會因讀不到共享數(shù)據(jù)而阻塞,保證了共享數(shù)據(jù)的 更新過程不會影響轉(zhuǎn)發(fā)線程正常的流量處理。
[0063] 另外,由于配置線程通過全局指針變量更新共享數(shù)據(jù),而轉(zhuǎn)發(fā)線程通過全局指針 變量讀取共享數(shù)據(jù),因此全局指針變量相當(dāng)于共享的全局指針變量。
[0064] 由于在全局指針變量指向新建的共享數(shù)據(jù)塊后,全局指針變量舊指向的共享數(shù)據(jù) 塊會被移入待回收資源池,因此,如果在這之前轉(zhuǎn)發(fā)線程正在讀取共享數(shù)據(jù),則在這之后轉(zhuǎn) 發(fā)線程讀取共享數(shù)據(jù)塊的過程實(shí)際上是在待回收資源池進(jìn)行的。
[0065] 在轉(zhuǎn)發(fā)線程讀取共享數(shù)據(jù)時(shí)還需考慮一個(gè)問題,保證轉(zhuǎn)發(fā)線程每次讀取到的共享 數(shù)據(jù)的前后一致性,即,需要保證轉(zhuǎn)發(fā)線程使用全局指針變量期間不能被更新共享數(shù)據(jù)所 中斷,轉(zhuǎn)發(fā)線程使用全局指針變量的操作越少越好,為此,本發(fā)明需要在轉(zhuǎn)發(fā)線程讀取共享 數(shù)據(jù)的流程中做一些改進(jìn)。
[0066] 圖3示出了根據(jù)本發(fā)明實(shí)施例的轉(zhuǎn)發(fā)線程讀取共享數(shù)據(jù)的流程。
[0067] 如圖3所示,本發(fā)明實(shí)施例提供的轉(zhuǎn)發(fā)線程讀取共享數(shù)據(jù)的流程,包括:
[0068] 步驟S301 :在全局指針變量指向的共享數(shù)據(jù)塊中設(shè)置引用計(jì)數(shù)器。
[0069] 步驟S302 :將指向共享數(shù)據(jù)塊的全局指針變量賦值到每個(gè)轉(zhuǎn)發(fā)線程的局部指針 變量。
[0070] 在將指向共享數(shù)據(jù)塊的全局指針變量賦值到每個(gè)轉(zhuǎn)發(fā)線程的局部指針變量后,每 個(gè)轉(zhuǎn)發(fā)線程的局部指針變量指向共享數(shù)據(jù)塊,之后轉(zhuǎn)發(fā)線程通過局部指針變量讀取共享數(shù) 據(jù)塊。
[0071] 步驟S303 :在全局指針變量賦值到轉(zhuǎn)發(fā)線程的局部指針變量后,將共享數(shù)據(jù)塊中 設(shè)置的引用計(jì)數(shù)器加一。
[0072] 引用計(jì)數(shù)器用于標(biāo)記共享數(shù)據(jù)塊的狀態(tài),引用計(jì)數(shù)器的初始值為零,引用計(jì)數(shù)器 加一,此時(shí)引用計(jì)數(shù)器的值大于零,表示當(dāng)前轉(zhuǎn)發(fā)線程正在或?qū)⒁x取共享數(shù)據(jù)塊中的共 享數(shù)據(jù)。
[0073] 步驟S304 :在轉(zhuǎn)發(fā)線程讀取共享數(shù)據(jù)塊中的共享數(shù)據(jù)后,將共享數(shù)據(jù)塊中設(shè)置的 引用計(jì)數(shù)器減一。
[0074] 同一時(shí)刻可能有多個(gè)轉(zhuǎn)發(fā)線程會讀取共享數(shù)據(jù),每個(gè)轉(zhuǎn)發(fā)線程讀取時(shí)都會將計(jì)數(shù) 器加一,讀完后做減一操作,因此減一操作之后,計(jì)數(shù)器的值不一定為零,因?yàn)橛锌赡芷渌?的轉(zhuǎn)發(fā)線程還正在讀取,當(dāng)所有的轉(zhuǎn)發(fā)線程讀取完共享數(shù)據(jù)后,此時(shí)引用計(jì)數(shù)器的值回到 零,表示當(dāng)前轉(zhuǎn)發(fā)線程已讀取完共享數(shù)據(jù)塊中的共享數(shù)據(jù)。
[0075] 上述步驟S301?步驟S304通過將全局指針變量賦值給局部指針變量的方式實(shí)現(xiàn) 共享數(shù)據(jù)塊的讀取,針對全局指針變量僅做了一次簡單的讀取操作,這樣就和前述的配置 線程對全局指針變量的賦值操作對應(yīng)起來,保證了對該共享的全局指針變量在不同線程中 操作的原子性。
[0076] 另外,共享數(shù)據(jù)的資源回收在配置線程中完成,讀取共享數(shù)據(jù)是在轉(zhuǎn)發(fā)線程中完 成,由于配置線程和轉(zhuǎn)發(fā)線程并行運(yùn)行于同一系統(tǒng),因此不同線程的處理流程可能被其它 線程的處理中斷。例如,當(dāng)轉(zhuǎn)發(fā)線程將全局變量指針值讀到局部變量后,此時(shí)如果被配置線 程的資源回收處理中斷,由于轉(zhuǎn)發(fā)線程還未將共享數(shù)據(jù)塊的引用計(jì)數(shù)增加,因此配置線程 會認(rèn)為該數(shù)據(jù)塊為未使用狀態(tài),會直接釋放數(shù)據(jù)塊資源,導(dǎo)致后續(xù)轉(zhuǎn)發(fā)線程繼續(xù)后續(xù)的步 驟時(shí),讀取到的是錯(cuò)誤的數(shù)據(jù)。
[0077] 為了解決上述問題,本發(fā)明針對轉(zhuǎn)發(fā)線程回收資源過程提供了一種超時(shí)處理機(jī) 制,圖4示出了根據(jù)本發(fā)明實(shí)施例的資源回收超時(shí)機(jī)制的流程,如圖4所示,本發(fā)明實(shí)施例 提供的資源回收超時(shí)機(jī)制的流程,包括:
[0078] 步驟S401 :判斷共享數(shù)據(jù)塊是否為使用狀態(tài);如果是,執(zhí)行步驟S405 ;如果否,執(zhí) 行步驟S402。
[0079] 首先,配置線程判斷共享數(shù)據(jù)塊的使用狀態(tài),如果共享數(shù)據(jù)塊為未使用狀態(tài)時(shí),執(zhí) 行步驟S405 ;如果共享數(shù)據(jù)塊為使用狀態(tài),則執(zhí)行步驟S402。
[0080] 步驟S402 :啟動定時(shí)器,設(shè)定等待時(shí)間。
[0081] 根據(jù)定時(shí)器設(shè)定一個(gè)等待時(shí)間,等待時(shí)間大于或等于轉(zhuǎn)發(fā)線程讀取全局變量指針 和增加引用計(jì)數(shù)值兩個(gè)操作完成的總時(shí)間,也就是步驟S302和步驟S303的總時(shí)長。
[0082] 步驟S403 :到達(dá)定時(shí)器設(shè)定的等待時(shí)間時(shí),再次判斷共享數(shù)據(jù)塊是否為使用狀 態(tài);如果是,執(zhí)行步驟S405 ;如果否,執(zhí)行步驟S404。
[0083] 當(dāng)經(jīng)過定時(shí)器設(shè)定的等待時(shí)間后,再次判斷共享數(shù)據(jù)塊的使用狀態(tài),如果仍為未 使用狀態(tài),才能進(jìn)行釋放共享數(shù)據(jù)塊資源的操作,如果仍為使用狀態(tài),則結(jié)束資源回收超時(shí) 機(jī)制的流程。
[0084] 步驟S404 :釋放共享數(shù)據(jù)塊資源。
[0085] 步驟S405:結(jié)束。
[0086] 上述步驟S401?步驟S405詳細(xì)描述了本發(fā)明實(shí)施例提供的資源回收超時(shí)機(jī)制的 流程,能夠解決轉(zhuǎn)發(fā)線程和配置線程之間的操作會互相干擾的問題,
[0087] 由于在資源回收超時(shí)機(jī)制中未使用鎖機(jī)制,因此不影響轉(zhuǎn)發(fā)線程的運(yùn)行效率。
[0088] 上述步驟S201?S205詳細(xì)說明了本發(fā)明實(shí)施例提供的多線程之間訪問共享數(shù)據(jù) 的方法,該方法從更新共享數(shù)據(jù)階段和轉(zhuǎn)發(fā)線程讀取共享數(shù)據(jù)階段做出改進(jìn)。
[0089] 為了更直觀地說明本發(fā)明提供的多線程之間訪問共享數(shù)據(jù)的方法,圖5示出了根 據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)交互的過程,如圖5所示,首先對共享數(shù)據(jù)結(jié)構(gòu)進(jìn)行預(yù)處理,在原共 享數(shù)據(jù)塊上層新增控制結(jié)構(gòu),同時(shí)新增全局指針變量,通過控制結(jié)構(gòu)指向共享數(shù)據(jù)塊,共享 數(shù)據(jù)塊是由鏈表組成的,為了方便表述,共享數(shù)據(jù)塊等同于鏈表。
[0090] 在更新共享數(shù)據(jù)時(shí),新建鏈表,將全局指針變量指向新建的鏈表,通過設(shè)置一個(gè)待 回收資源池回收全局指針變量舊指向的鏈表,并定期清理待回收資源池內(nèi)的鏈表,釋放鏈 表所占用的內(nèi)存資源。
[0091] 在轉(zhuǎn)發(fā)線程讀取共享數(shù)據(jù)時(shí),將全局指針變量賦值到轉(zhuǎn)發(fā)線程的局部指針變量, 此時(shí),設(shè)置在鏈表中的引用計(jì)數(shù)器加一,在轉(zhuǎn)發(fā)線程讀取共享數(shù)據(jù)后,引用計(jì)數(shù)器減一,以 保證對全局指針變量在不同線程中訪問的原子性。
[0092] 與上述方法相對應(yīng),本發(fā)明還提供一種多線程之間訪問共享數(shù)據(jù)的裝置。圖6示 出了根據(jù)本發(fā)明實(shí)施例的多線程之間訪問共享數(shù)據(jù)的裝置的邏輯結(jié)構(gòu)。
[0093] 如圖6所示,本發(fā)明提供的本發(fā)明實(shí)施例提供的多線程之間訪問共享數(shù)據(jù)的裝 置,包括控制結(jié)構(gòu)新增單元610、全局指針變量新增單元620、共享數(shù)據(jù)塊新建單元630、指 針指向改變單元640、線程封裝單元650、共享數(shù)據(jù)讀取單元660。
[0094] 其中,控制結(jié)構(gòu)新增單元610用于在當(dāng)前的共享數(shù)據(jù)塊中新增控制結(jié)構(gòu),訪問當(dāng) 前的共享數(shù)據(jù)塊中的共享數(shù)據(jù)。
[0095] 全局指針變量新增單元620用于在當(dāng)前的共享數(shù)據(jù)塊中新增全局指針變量,通過 控制結(jié)構(gòu)指向當(dāng)前的共享數(shù)據(jù)塊。
[0096] 共享數(shù)據(jù)塊新建單元630用于在更新共享數(shù)據(jù)時(shí),新建共享數(shù)據(jù)塊。
[0097] 指針指向改變單元640用于通過修改全局指針變量的賦值,使全局指針變量通過 控制結(jié)構(gòu)從指向當(dāng)前的共享數(shù)據(jù)塊變?yōu)橹赶蛐陆ǖ墓蚕頂?shù)據(jù)塊。
[0098] 線程封裝單元650用于封裝多個(gè)線程。
[0099] 共享數(shù)據(jù)讀取單元660用于使封裝后的多個(gè)線程通過全局指針變量讀取全局指 針變量指向的共享數(shù)據(jù)塊中的共享數(shù)據(jù)。
[0100] 圖7示出了根據(jù)本發(fā)明實(shí)施例的多線程之間訪問共享數(shù)據(jù)的裝置的一個(gè)具體實(shí) 施方式的邏輯結(jié)構(gòu)。如圖7所示,該裝置還包括共享數(shù)據(jù)塊清除單元670,用于在全局指針 變量通過控制結(jié)構(gòu)指向新建的共享數(shù)據(jù)塊后,清除全局指針變量舊指向的共享數(shù)據(jù)塊。 [0101] 共享數(shù)據(jù)塊清除單元670包括待回收資源池創(chuàng)建模塊671和待回收資源池清理模 塊 672。
[0102] 其中,待回收資源池創(chuàng)建模塊671用于創(chuàng)建待回收資源池,存放全局指針變量舊 指向的共享數(shù)據(jù)塊,待回收資源池清理模塊672,用于清理待回收資源池內(nèi)的共享數(shù)據(jù)塊。
[0103] 在每次更新共享數(shù)據(jù)時(shí),全局指針變量通過控制結(jié)構(gòu)指向新建的共享數(shù)據(jù)塊后, 將全局指針變量舊指向的共享數(shù)據(jù)塊移入待回收資源池,待回收資源池清理模塊672清理 待回收資源池內(nèi)的共享數(shù)據(jù)塊。
[0104] 其中,在待回收資源池清理模塊672清理待回收資源池內(nèi)共享數(shù)據(jù)塊的時(shí)間為: 在將全局指針變量舊指向的共享數(shù)據(jù)塊移入待回收資源池時(shí)立刻清理待回收資源池中的 共享數(shù)據(jù)塊或?qū)⒕€程讀取一次共享數(shù)據(jù)時(shí)的最長時(shí)間作為周期,根據(jù)該周期清理待回收資 源池中的共享數(shù)據(jù)塊。
[0105] 另外,在待回收資源池清理模塊672清理待回收資源池中的共享數(shù)據(jù)塊的過程 中,在共享數(shù)據(jù)塊的狀態(tài)為未使用時(shí),清理共享數(shù)據(jù)塊;在共享數(shù)據(jù)塊的狀態(tài)為使用時(shí),待 共享數(shù)據(jù)塊的使用狀態(tài)變?yōu)槲词褂脿顟B(tài)時(shí),清理共享數(shù)據(jù)塊。
[0106] 再者,在共享數(shù)據(jù)讀取單元660使封裝后的多個(gè)線程通過全局指針變量讀取全局 指針變量指向的共享數(shù)據(jù)塊中的共享數(shù)據(jù)的過程中,在全局指針變量指向的共享數(shù)據(jù)塊中 設(shè)置初始值為零的引用計(jì)數(shù)器,將指向共享數(shù)據(jù)塊的全局指針變量賦值到每個(gè)線程的局部 指針變量后,共享數(shù)據(jù)塊中設(shè)置的引用計(jì)數(shù)器加一,當(dāng)引用計(jì)數(shù)器值大于零時(shí),標(biāo)識局部指 針變量指向的共享數(shù)據(jù)塊為使用狀態(tài);在每個(gè)線程讀取共享數(shù)據(jù)塊中的共享數(shù)據(jù)后,共享 數(shù)據(jù)塊中設(shè)置的引用計(jì)數(shù)器減一,當(dāng)引用計(jì)數(shù)器值為零時(shí),標(biāo)識局部指針變量指向的共享 數(shù)據(jù)塊為未使用狀態(tài)。
[0107] 上述詳細(xì)地描述了本發(fā)明提供的多線程之間訪問共享數(shù)據(jù)的方法及裝置,通過將 轉(zhuǎn)發(fā)線程對復(fù)雜的共享數(shù)據(jù)的訪問轉(zhuǎn)換成對簡單變量的訪問,從而代替轉(zhuǎn)發(fā)線程以鎖機(jī)制 的方式訪問復(fù)雜的共享數(shù)據(jù),能夠有效避免轉(zhuǎn)發(fā)線程訪問共享數(shù)據(jù)時(shí)引起線程阻塞。
[0108] 以上所述,僅為本發(fā)明的【具體實(shí)施方式】,但本發(fā)明的保護(hù)范圍并不局限于此,任何 熟悉本【技術(shù)領(lǐng)域】的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵 蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)所述以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
【權(quán)利要求】
1. 一種多線程之間訪問共享數(shù)據(jù)的方法,包括共享數(shù)據(jù)更新階段和共享數(shù)據(jù)讀取階 段;其中, 所述共享數(shù)據(jù)更新階段,包括: 在當(dāng)前的共享數(shù)據(jù)塊中新增控制結(jié)構(gòu)和全局指針變量;其中,所述控制結(jié)構(gòu)用于訪問 所述共享數(shù)據(jù)塊中的共享數(shù)據(jù);所述全局指針變量通過所述控制結(jié)構(gòu)指向當(dāng)前的共享數(shù)據(jù) 塊; 在更新共享數(shù)據(jù)時(shí),新建共享數(shù)據(jù)塊;修改所述全局指針變量的賦值,使所述全局指針 變量通過所述控制結(jié)構(gòu)從指向當(dāng)前的共享數(shù)據(jù)塊變?yōu)橹赶蛐陆ǖ墓蚕頂?shù)據(jù)塊; 所述共享數(shù)據(jù)讀取階段,包括: 封裝多個(gè)線程; 封裝后的多個(gè)線程通過所述全局指針變量讀取所述全局指針變量指向的共享數(shù)據(jù)塊 中的共享數(shù)據(jù)。
2. 如權(quán)利要求1所述的多線程之間訪問共享數(shù)據(jù)的方法,在所述全局指針變量通過所 述控制結(jié)構(gòu)指向新建的共享數(shù)據(jù)塊后,清除所述全局指針變量舊指向的共享數(shù)據(jù)塊;其中, 在清除所述全局指針變量舊指向的共享數(shù)據(jù)塊的過程中, 創(chuàng)建待回收資源池;用于存放所述全局指針變量舊指向的共享數(shù)據(jù)塊;將所述全局指 針變量舊指向的共享數(shù)據(jù)塊移入所述待回收資源池,并清理所述待回收資源池內(nèi)的共享數(shù) 據(jù)塊。
3. 如權(quán)利要求2所述的多線程之間訪問共享數(shù)據(jù)的方法,其中,清理待回收資源池內(nèi) 的共享數(shù)據(jù)塊的時(shí)間,包括: 在將所述全局指針變量舊指向的共享數(shù)據(jù)塊移入所述待回收資源池時(shí),立刻清理所述 待回收資源池中的共享數(shù)據(jù)塊或?qū)⒕€程讀取一次共享數(shù)據(jù)時(shí)的最長時(shí)間作為周期,根據(jù)所 述周期清理所述待回收資源池內(nèi)的共享數(shù)據(jù)塊。
4. 如權(quán)利要求3所述的多線程之間訪問共享數(shù)據(jù)的方法,其中,在清理待回收資源池 內(nèi)的共享數(shù)據(jù)塊的過程中, 在所述共享數(shù)據(jù)塊的狀態(tài)為未使用時(shí),清理所述共享數(shù)據(jù)塊;在所述待回收資源池內(nèi) 的共享數(shù)據(jù)塊的狀態(tài)為使用時(shí),待所述共享數(shù)據(jù)塊的使用狀態(tài)變?yōu)槲词褂脿顟B(tài)時(shí),清理所 述共享數(shù)據(jù)塊。
5. 如權(quán)利要求4所述的多線程之間訪問共享數(shù)據(jù)的方法,其中,在封裝后的多個(gè)線程 通過所述全局指針變量讀取所述全局指針變量指向的共享數(shù)據(jù)塊中的共享數(shù)據(jù)的過程中, 在所述全局指針變量指向的共享數(shù)據(jù)塊中設(shè)置初始值為零的引用計(jì)數(shù)器,將所述全局 指針變量賦值到每個(gè)線程的局部指針變量后,所述局部指針變量指向的共享數(shù)據(jù)塊中設(shè)置 的引用計(jì)數(shù)器加一,當(dāng)所述引用計(jì)數(shù)器值大于零時(shí),標(biāo)識所述局部指針變量指向的共享數(shù) 據(jù)塊為使用狀態(tài); 在每個(gè)線程讀取所述局部指針變量指向的共享數(shù)據(jù)塊中的共享數(shù)據(jù)后,所述局部指針 變量指向的共享數(shù)據(jù)塊中設(shè)置的引用計(jì)數(shù)器減一;當(dāng)所述引用計(jì)數(shù)器值為零時(shí),標(biāo)識所述 局部指針變量指向的共享數(shù)據(jù)塊為未使用狀態(tài)。
6. -種多線程之間訪問共享數(shù)據(jù)的裝置,包括: 控制結(jié)構(gòu)新增單元,用于在當(dāng)前的共享數(shù)據(jù)塊中新增控制結(jié)構(gòu),所述控制結(jié)構(gòu)用于訪 問所述共享數(shù)據(jù)塊中的共享數(shù)據(jù); 全局指針變量新增單元,用于在當(dāng)前的共享數(shù)據(jù)塊中新增全局指針變量,所述全局指 針變量通過所述控制結(jié)構(gòu)指向當(dāng)前的共享數(shù)據(jù)塊; 共享數(shù)據(jù)塊新建單元,用于在更新共享數(shù)據(jù)時(shí),新建共享數(shù)據(jù)塊; 指針指向改變單元,用于通過修改所述全局指針變量的賦值,使所述全局指針變量通 過所述控制結(jié)構(gòu)從指向當(dāng)前的共享數(shù)據(jù)塊變?yōu)橹赶蛐陆ǖ墓蚕頂?shù)據(jù)塊; 線程封裝單元,用于封裝多個(gè)線程; 共享數(shù)據(jù)讀取單元,用于使封裝后的多個(gè)線程通過所述全局指針變量讀取所述全局指 針變量指向的共享數(shù)據(jù)塊中的共享數(shù)據(jù)。
7. 如權(quán)利要求6所述的多線程之間訪問共享數(shù)據(jù)的裝置,還包括共享數(shù)據(jù)塊清除單 元,用于在所述全局指針變量通過所述控制結(jié)構(gòu)指向新建的共享數(shù)據(jù)塊后,清除所述全局 指針變量舊指向的共享數(shù)據(jù)塊;所述共享數(shù)據(jù)塊清除單元包括: 待回收資源池創(chuàng)建模塊,用于創(chuàng)建待回收資源池,存放所述全局指針變量舊指向的共 享數(shù)據(jù)塊; 待回收資源池清理模塊,用于清理所述待回收資源池; 在每次更新共享數(shù)據(jù)時(shí),所述全局指針變量指向新建的共享數(shù)據(jù)塊后,將所述全局指 針變量舊指向的共享數(shù)據(jù)塊移入所述待回收資源池,待回收資源池清理模塊清理所述待回 收資源池內(nèi)的共享數(shù)據(jù)塊。
8. 如權(quán)利要求7所述的多線程之間訪問共享數(shù)據(jù)的裝置,其中,所述待回收資源池清 理模塊清理待回收資源池內(nèi)的共享數(shù)據(jù)塊的時(shí)間,包括: 在將所述全局指針變量舊指向的共享數(shù)據(jù)塊移入所述待回收資源池時(shí),立刻清理所述 待回收資源池中的共享數(shù)據(jù)塊或?qū)⒕€程讀取一次共享數(shù)據(jù)時(shí)的最長時(shí)間作為周期,根據(jù)所 述周期清理所述待回收資源池中的共享數(shù)據(jù)塊。
9. 如權(quán)利要求8所述的多線程之間訪問共享數(shù)據(jù)的裝置,其中,在所述待回收資源池 清理模塊清理待回收資源池中的共享數(shù)據(jù)塊的過程中, 在所述共享數(shù)據(jù)塊的狀態(tài)為未使用時(shí),清理所述共享數(shù)據(jù)塊;在所述待回收資源池內(nèi) 的共享數(shù)據(jù)塊的狀態(tài)為使用時(shí),待所述共享數(shù)據(jù)塊的使用狀態(tài)變?yōu)槲词褂脿顟B(tài)時(shí),清理所 述共享數(shù)據(jù)塊。
10. 如權(quán)利要求9所述的多線程之間訪問共享數(shù)據(jù)的裝置,其中,在共享數(shù)據(jù)讀取單元 使封裝后的多個(gè)線程通過所述全局指針變量讀取所述全局指針變量指向的共享數(shù)據(jù)塊中 的共享數(shù)據(jù)的過程中, 在所述全局指針變量指向的共享數(shù)據(jù)塊中設(shè)置初始值為零的引用計(jì)數(shù)器,將所述全局 指針變量賦值到每個(gè)線程的局部指針變量后,所述局部指針變量指向的共享數(shù)據(jù)塊中設(shè)置 的引用計(jì)數(shù)器加一,當(dāng)所述引用計(jì)數(shù)器值大于零時(shí),標(biāo)識所述局部指針變量指向的共享數(shù) 據(jù)塊為使用狀態(tài); 在每個(gè)線程讀取所述局部指針變量指向的共享數(shù)據(jù)塊中的共享數(shù)據(jù)后,所述局部指針 變量指向的共享數(shù)據(jù)塊中設(shè)置的引用計(jì)數(shù)器減一;當(dāng)所述引用計(jì)數(shù)器值為零時(shí),標(biāo)識所述 局部指針變量指向的共享數(shù)據(jù)塊為未使用狀態(tài)。
【文檔編號】G06F9/46GK104216767SQ201410478347
【公開日】2014年12月17日 申請日期:2014年9月18日 優(yōu)先權(quán)日:2014年9月18日
【發(fā)明者】王海峰, 劉申, 陳靜相 申請人:東軟集團(tuán)股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1