本技術(shù)實施例涉及計算機領(lǐng)域,尤其涉及一種多線程并發(fā)訪問方法以及裝置。
背景技術(shù):
1、讀寫鎖機制是多線程編程中常用的一種同步機制,它采用了一定的算法和數(shù)據(jù)結(jié)構(gòu)來實現(xiàn)對共享資源的讀寫操作的安全性和效率的平衡。當多線程對同一共享資源進行訪問操作時,為防止線程沖突通過讀寫鎖進行控制線程對共享資源的訪問。
2、目前的鎖有兩種狀態(tài):寫鎖狀態(tài)和讀鎖狀態(tài)。寫鎖狀態(tài)即為排他鎖,加寫鎖后只能由一個線程對共享資源進行讀寫操作。當已經(jīng)是寫鎖狀態(tài),其他線程是無法再次持有寫鎖狀態(tài),也不可持有讀鎖狀態(tài)。讀鎖狀態(tài)即為共享鎖,多個線程可以同時持有讀鎖,可對數(shù)據(jù)進行讀取操作。
3、目前多線程訪問共享資源使用了讀寫鎖的能力,在大規(guī)模并發(fā)情況下,共享資源為多線程串行處理。當保護的共享資源范圍較大時,不同線程訪問的范圍不一樣,比如鎖住一個大結(jié)構(gòu)體或者大的數(shù)組,為了保證保護資源一致性,不管線程訪問其中一個字段,或者一個數(shù)組單元,還是修改多個字段或者多個數(shù)組單元,均通過加寫鎖鎖住整個共享資源,導(dǎo)致線程并發(fā)訪問共享資源的效率低。
技術(shù)實現(xiàn)思路
1、本技術(shù)實施例提供了一種線程并發(fā)訪問方法以及裝置,用于提升多線程并發(fā)訪問共享資源的效率。
2、本技術(shù)實施例第一方面提供了一種多線程并發(fā)訪問方法,該方法可以由計算設(shè)備執(zhí)行,也可以由計算設(shè)備的部件,例如計算設(shè)備的處理器、芯片或芯片系統(tǒng)等執(zhí)行,還可以由能實現(xiàn)全部或部分計算設(shè)備功能的邏輯模塊或軟件實現(xiàn)。以計算設(shè)備執(zhí)行為例,第一方面的方法包括:計算設(shè)備接收第一加鎖請求,第一加鎖請求用于請求第一線程對共享資源進行寫操作的互信鎖,互信鎖用于對共享資源進行非排他寫操作。其中,計算設(shè)備用于執(zhí)行第一線程和第二線程,第一線程用于在共享資源的第一數(shù)據(jù)單元進行寫操作,第二線程用于在共享資源的第二數(shù)據(jù)單元進行寫操作,第一數(shù)據(jù)單元和第二數(shù)據(jù)單元為不同的數(shù)據(jù)單元。計算設(shè)備根據(jù)第一加鎖請求向第一線程發(fā)放互信鎖。第一線程獲取互信鎖之后,第一線程和第二線程基于互信鎖并發(fā)對共享資源進行寫操作,第二線程為已獲取互信鎖的線程。
3、本技術(shù)實施例提供了一種互信鎖狀態(tài),使得計算設(shè)備中多個線程能夠通過互信鎖能夠并發(fā)對共享資源的不同數(shù)據(jù)單元進行寫操作,從而消除寫鎖狀態(tài)下的沖突等待,提升了計算設(shè)備的多線程訪問共享資源的效率。
4、一種可能的實施方式中,計算設(shè)備還用于執(zhí)行第三線程,第三線程用于在共享資源全局數(shù)據(jù)單元進行寫操作,計算設(shè)備接收第二加鎖請求,第二加鎖請求用于請求第三線程對共享資源進行并發(fā)寫操作的互信鎖。當?shù)谝痪€程或第二線程獲取互信鎖后,第三線程等待互信鎖釋放。
5、本技術(shù)實施例中計算設(shè)備能夠?qū)υL問共享資源的不同數(shù)據(jù)單元的線程發(fā)放互信鎖,訪問共享資源的數(shù)據(jù)單元存在沖突的線程無法獲取互信鎖,從而在提升互信線程對共享資源寫操作效率的同時,保障了對共享資源進行寫操作的安全性。
6、一種可能的實施方式中,計算設(shè)備根據(jù)第一加鎖請求向第一線程發(fā)放互信鎖的過程中,當鎖狀態(tài)變量的互信鎖狀態(tài)位未置位時,計算設(shè)備根據(jù)第一加鎖請求將鎖狀態(tài)變量的互信鎖狀態(tài)位置位,并將鎖狀態(tài)變量的鎖計數(shù)位進行增計數(shù)。當鎖狀態(tài)變量的互信鎖狀態(tài)位已置位時,計算設(shè)備根據(jù)第一加鎖請求將鎖狀態(tài)變量的鎖計數(shù)位進行增計數(shù)。
7、本技術(shù)實施例中計算設(shè)備通過在鎖狀態(tài)變量中增加互信鎖狀態(tài)位記錄共享資源對應(yīng)的互信鎖鎖狀態(tài),并通過互信鎖狀態(tài)位和鎖計數(shù)位記錄持有互信鎖的線程數(shù)量,計算設(shè)備還能夠根據(jù)加鎖請求對鎖計數(shù)位進行增計數(shù),從而提升了多線程并發(fā)訪問共享資源的可實現(xiàn)性。
8、一種可能的實施方式中,計算設(shè)備接收第一線程的第一解鎖請求,第一解鎖請求用于請求解除共享資源的互信鎖。當鎖狀態(tài)變量的鎖計數(shù)位大于1時,根據(jù)互信鎖第一解鎖請求將鎖狀態(tài)變量的鎖計數(shù)位進行減計數(shù)。當鎖狀態(tài)變量的鎖計數(shù)位等于1時,根據(jù)互信鎖第一解鎖請求將鎖狀態(tài)變量的鎖計數(shù)位進行減計數(shù),并將鎖狀態(tài)變量的互信鎖狀態(tài)位恢復(fù)為未置位。
9、本技術(shù)實施例中計算設(shè)備能夠根據(jù)解鎖請求對鎖計數(shù)位進行減計,當鎖計數(shù)位減計數(shù)為0時,計算設(shè)備將互信鎖狀態(tài)位恢復(fù)置位,從而提升了多線程并發(fā)訪問共享資源的可實現(xiàn)性。
10、一種可能的實施方式中,計算設(shè)備還用于執(zhí)行第四線程,第四線程為已持有互信鎖的線程,第四線程用于在共享資源的第一數(shù)據(jù)單元進行寫操作,計算設(shè)備接收第三加鎖請求,第三加鎖請求用于請求第四線程對共享資源的第一數(shù)據(jù)單元進行寫操作的分段鎖,分段鎖用于排他訪問第一數(shù)據(jù)單元。
11、本技術(shù)實施例中計算設(shè)備能夠?qū)Τ钟谢バ沛i的線程發(fā)放分段鎖,從而使得多個線程并發(fā)對共享資源進行寫操作的同時,線程能夠?qū)蚕碣Y源的某一數(shù)據(jù)單元進行排他寫操作,從而提升了多線程對共享資源進行寫操作的效率以及多線程對共享資源進行寫操作的安全性。
12、一種可能的實施方式中,當?shù)谝痪€程持有互信鎖時,其他線程無法持有共享資源對應(yīng)的寫鎖和讀鎖,寫鎖用于對共享資源進行排他寫操作,讀鎖用于對共享資源進行非排他讀操作。當?shù)谝痪€程持有寫鎖時,其他線程無法持有共享資源對應(yīng)的互信鎖和讀鎖。當?shù)谝痪€程持有讀鎖時,其他線程無法持有共享資源對應(yīng)的互信鎖和寫鎖。
13、本技術(shù)實施例中共享資源對應(yīng)的不同鎖狀態(tài)之間不能夠同時出現(xiàn),從而提升了不同鎖狀態(tài)的保護能力。
14、一種可能的實施方式中,當互信鎖狀態(tài)位未置位時,鎖計數(shù)位用于指示持有讀鎖的線程數(shù)量。
15、本技術(shù)實施例中計算設(shè)備通過新增互信鎖狀態(tài)位并利用鎖計數(shù)位記錄持有寫鎖的線程數(shù)量,從而復(fù)用了讀鎖的鎖計數(shù)位,提升了鎖計數(shù)位的記錄效率。
16、一種可能的實施方式中,互信鎖應(yīng)用于數(shù)據(jù)庫事務(wù)管理,計算設(shè)備的多個不同線程基于互信鎖并發(fā)對數(shù)據(jù)庫中的事務(wù)狀態(tài)進行寫操作。事務(wù)狀態(tài)包括活動狀態(tài)、提交狀態(tài)和回滾狀態(tài)?;訝顟B(tài)下的事務(wù)尚未完成,可以繼續(xù)執(zhí)行數(shù)據(jù)庫的操作。提交狀態(tài)下事務(wù)的修改操作已被成功提交到數(shù)據(jù)庫中,所有更改變得永久保存。回滾狀態(tài)下事務(wù)已被回滾,取消或失敗,所有操作和變化都被撤消,修改的數(shù)據(jù)恢復(fù)到事務(wù)開始之前的狀態(tài)。
17、本技術(shù)實施例中計算設(shè)備能夠通過互信鎖并發(fā)對數(shù)據(jù)庫中的事務(wù)狀態(tài)進行寫操作,從而提升了事務(wù)狀態(tài)的并發(fā)寫性能。
18、一種可能的實施方式中,互信鎖應(yīng)用于數(shù)據(jù)庫頁管理,數(shù)據(jù)庫頁管理是指將數(shù)據(jù)庫的數(shù)據(jù)文件劃分為一組固定大小的數(shù)據(jù)塊,即頁,計算設(shè)備管理這些頁的使用和狀態(tài),包括頁的讀取與寫入。計算設(shè)備的多個不同線程基于互信鎖并發(fā)對數(shù)據(jù)庫頁中的表項進行寫操作。
19、本技術(shù)實施例中計算設(shè)備能夠通過互信鎖并發(fā)對數(shù)據(jù)庫中頁進行寫操作,將數(shù)據(jù)庫頁單頁鎖定修改數(shù)據(jù)庫頁不同區(qū)域鎖定,從而提升了數(shù)據(jù)庫頁中的事務(wù)并發(fā)寫性能。
20、本技術(shù)實施例第二方面提供了一種多線程并發(fā)訪問裝置,裝置用于執(zhí)行第一線程和第二線程,第一線程用于在共享資源的第一數(shù)據(jù)單元進行寫操作,第二線程用于在共享資源的第二數(shù)據(jù)單元進行寫操作,第一數(shù)據(jù)單元和第二數(shù)據(jù)單元為不同的數(shù)據(jù)單元,該裝置包括收發(fā)單元和處理單元,其中,收發(fā)單元用于接收第一加鎖請求,第一加鎖請求用于請求第一線程對共享資源進行寫操作的互信鎖,互信鎖用于對共享資源進行非排他寫操作。處理單元用于根據(jù)第一加鎖請求向第一線程發(fā)放互信鎖,處理單元的第一線程和第二線程基于互信鎖并發(fā)對共享資源進行寫操作,第二線程為已獲取互信鎖的線程。
21、一種可能的實施方式中,裝置還用于執(zhí)行第三線程,第三線程用于在共享資源全局數(shù)據(jù)單元進行寫操作,收發(fā)單元還用于接收第二加鎖請求,第二加鎖請求用于請求第三線程對共享資源進行并發(fā)寫操作的互信鎖。當?shù)谝痪€程或第二線程獲取互信鎖后,處理單元的第三線程等待互信鎖釋放。
22、一種可能的實施方式中,處理單元具體用于當鎖狀態(tài)變量的互信鎖狀態(tài)位未置位時,根據(jù)第一加鎖請求將鎖狀態(tài)變量的互信鎖狀態(tài)位置位,并將鎖狀態(tài)變量的鎖計數(shù)位進行增計數(shù)。當鎖狀態(tài)變量的互信鎖狀態(tài)位已置位時,根據(jù)第一加鎖請求將鎖狀態(tài)變量的鎖計數(shù)位進行增計數(shù)。
23、一種可能的實施方式中,收發(fā)單元還用于接收第一線程的第一解鎖請求,第一解鎖請求用于請求解除共享資源的互信鎖。當鎖狀態(tài)變量的鎖計數(shù)位大于1時,處理單元具體用于根據(jù)互信鎖第一解鎖請求將鎖狀態(tài)變量的鎖計數(shù)位進行減計數(shù)。當鎖狀態(tài)變量的鎖計數(shù)位等于1時,處理單元具體用于根據(jù)互信鎖第一解鎖請求將鎖狀態(tài)變量的鎖計數(shù)位進行減計數(shù),并將鎖狀態(tài)變量的互信鎖狀態(tài)位恢復(fù)為未置位。
24、一種可能的實施方式中,裝置還用于執(zhí)行第四線程,第四線程為已持有互信鎖的線程,第四線程用于在共享資源的第一數(shù)據(jù)單元進行寫操作,收發(fā)單元還用于接收第三加鎖請求,第三加鎖請求用于請求第四線程對共享資源的第一數(shù)據(jù)單元進行寫操作的分段鎖,分段鎖用于排他訪問第一數(shù)據(jù)單元。
25、一種可能的實施方式中,處理單元還用于當?shù)谝痪€程持有互信鎖時,其他線程無法持有共享資源對應(yīng)的寫鎖和讀鎖,寫鎖用于對共享資源進行排他寫操作,讀鎖用于對共享資源進行非排他讀操作。
26、一種可能的實施方式中,互信鎖應(yīng)用于數(shù)據(jù)庫事務(wù)管理,多個不同線程基于互信鎖并發(fā)對數(shù)據(jù)庫中的事務(wù)狀態(tài)進行寫操作。
27、一種可能的實施方式中,互信鎖應(yīng)用于數(shù)據(jù)庫頁管理,多個不同線程基于互信鎖并發(fā)對數(shù)據(jù)庫頁中的表項進行寫操作。
28、本技術(shù)實施例第三方面提供了一種計算設(shè)備,包括處理器,處理器與存儲器耦合,處理器用于存儲指令,當指令被處理器執(zhí)行時,以使得計算設(shè)備執(zhí)行上述第一方面或第一方面任一項可能的實施方式所述的方法。
29、本技術(shù)實施例第四方面提供了一種計算設(shè)備集群,包括一個或多個計算設(shè)備,計算設(shè)備包括處理器,處理器與存儲器耦合,處理器用于存儲指令,當指令被處理器執(zhí)行時,以使得計算設(shè)備集群執(zhí)行上述第一方面或第一方面任一項可能的實施方式所述的方法。
30、本技術(shù)實施例第五方面提供了一種計算機可讀存儲介質(zhì),其上存儲有指令,指令被執(zhí)行時,以使得計算機執(zhí)行上述第一方面或第一方面任一項可能的實施方式所述的方法。
31、本技術(shù)實施例第六方面提供了一種計算機程序產(chǎn)品,計算機程序產(chǎn)品中包括指令,其特征在于,指令被執(zhí)行時,以使得計算機實現(xiàn)上述第一方面或第一方面任一項可能的實施方式所述的方法。
32、可以理解,上述提供的任意一種多線程并發(fā)訪問裝置、計算設(shè)備、計算機可讀介質(zhì)或計算機程序產(chǎn)品等所能達到的有益效果可參考對應(yīng)的計算系統(tǒng)中的有益效果,此處不再贅述。