[發(fā)明專利]一種隊(duì)列存取數(shù)據(jù)的方法、裝置及電子設(shè)備在審
| 申請(qǐng)?zhí)枺?/td> | 201810311279.3 | 申請(qǐng)日: | 2018-04-09 |
| 公開(kāi)(公告)號(hào): | CN110362348A | 公開(kāi)(公告)日: | 2019-10-22 |
| 發(fā)明(設(shè)計(jì))人: | 黃浩;張文明;陳少杰 | 申請(qǐng)(專利權(quán))人: | 武漢斗魚(yú)網(wǎng)絡(luò)科技有限公司 |
| 主分類(lèi)號(hào): | G06F9/38 | 分類(lèi)號(hào): | G06F9/38 |
| 代理公司: | 北京品源專利代理有限公司 11332 | 代理人: | 孟金喆 |
| 地址: | 430070 湖北省武漢市武漢東湖*** | 國(guó)省代碼: | 湖北;42 |
| 權(quán)利要求書(shū): | 查看更多 | 說(shuō)明書(shū): | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 原子操作 隊(duì)列 裝置及電子設(shè)備 讀取指令 隊(duì)列存取 寫(xiě)入指令 線程 隊(duì)列數(shù)據(jù) 寫(xiě)入數(shù)據(jù) 入隊(duì) 出隊(duì) 讀出 寫(xiě)入 保證 | ||
本發(fā)明實(shí)施例公開(kāi)了一種隊(duì)列存取數(shù)據(jù)的方法、裝置及電子設(shè)備,所述方法包括:接收一個(gè)或多個(gè)生產(chǎn)者線程的寫(xiě)入指令,并根據(jù)所述寫(xiě)入指令基于原子操作向當(dāng)前隊(duì)列寫(xiě)入數(shù)據(jù);接收一個(gè)或多個(gè)消費(fèi)者線程的讀取指令,并根據(jù)所述讀取指令基于原子操作從當(dāng)前隊(duì)列讀取數(shù)據(jù)。通過(guò)采用上述技術(shù)方案,在數(shù)據(jù)被寫(xiě)入/讀出隊(duì)列時(shí),通過(guò)采用原子操作,不僅保證了隊(duì)列數(shù)據(jù)的正確性,同時(shí)還提高了數(shù)據(jù)入隊(duì)/出隊(duì)的速度。
技術(shù)領(lǐng)域
本發(fā)明實(shí)施例涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種隊(duì)列存取數(shù)據(jù)的方法、裝置及電子設(shè)備。
背景技術(shù)
隊(duì)列是一種先進(jìn)先出的線性表,簡(jiǎn)稱FIFO,通常用鏈表來(lái)實(shí)現(xiàn)。隊(duì)列的隊(duì)尾只允許進(jìn)行插入數(shù)據(jù)操作,隊(duì)頭只允許進(jìn)行刪除數(shù)據(jù)操作。在隊(duì)列的隊(duì)尾插入數(shù)據(jù)稱為入隊(duì),在隊(duì)列的隊(duì)頭刪除數(shù)據(jù)稱為出隊(duì)。通常在特定的場(chǎng)景下(例如生產(chǎn)者消費(fèi)者模式)一個(gè)線程負(fù)責(zé)往隊(duì)列里寫(xiě)數(shù)據(jù),一個(gè)線程負(fù)責(zé)從隊(duì)列里讀數(shù)據(jù)。
現(xiàn)有的生產(chǎn)者消費(fèi)者編程場(chǎng)景下的隊(duì)列模式存在一些缺陷,例如,若兩個(gè)線程(一個(gè)讀線程和一個(gè)寫(xiě)線程)均不采取任何安全策略,由于CPU(Central Processing Unit,中央處理單元)的亂序執(zhí)行,可能一個(gè)數(shù)據(jù)還沒(méi)有寫(xiě)完就被其他線程搶占去執(zhí)行其他操作,因此無(wú)法保證隊(duì)列數(shù)據(jù)的正確性;若兩個(gè)線程采用加鎖方式,雖然能夠保證隊(duì)列數(shù)據(jù)的正確性,但是卻導(dǎo)致線程的響應(yīng)性能降低,影響各線程的執(zhí)行效率。
發(fā)明內(nèi)容
為解決相關(guān)技術(shù)問(wèn)題,本發(fā)明提供一種隊(duì)列存取數(shù)據(jù)的方法、裝置及電子設(shè)備,通過(guò)所述方法可以保證隊(duì)列數(shù)據(jù)正確的同時(shí)提高數(shù)據(jù)的入隊(duì)、出隊(duì)速度。
為實(shí)現(xiàn)上述目的,本發(fā)明實(shí)施例采用如下技術(shù)方案:
第一方面,本發(fā)明實(shí)施例提供了一種隊(duì)列存取數(shù)據(jù)的方法,所述方法包括:
接收一個(gè)或多個(gè)生產(chǎn)者線程的寫(xiě)入指令,并根據(jù)所述寫(xiě)入指令基于原子操作向當(dāng)前隊(duì)列寫(xiě)入數(shù)據(jù);
接收一個(gè)或多個(gè)消費(fèi)者線程的讀取指令,并根據(jù)所述讀取指令基于原子操作從當(dāng)前隊(duì)列讀取數(shù)據(jù)。
進(jìn)一步的,所述接收一個(gè)或多個(gè)生產(chǎn)者線程的寫(xiě)入指令,并根據(jù)所述寫(xiě)入指令基于原子操作向當(dāng)前隊(duì)列寫(xiě)入數(shù)據(jù),包括:
通過(guò)調(diào)用寫(xiě)原子函數(shù)獲取當(dāng)前隊(duì)列的入隊(duì)位置;
將所述入隊(duì)位置增加一,得到下次準(zhǔn)備入隊(duì)的位置;
通過(guò)調(diào)用讀原子函數(shù)獲取當(dāng)前隊(duì)列的出隊(duì)位置;
若所述下次準(zhǔn)備入隊(duì)的位置與所述出隊(duì)位置不相同,則申請(qǐng)用于存儲(chǔ)待寫(xiě)入數(shù)據(jù)的內(nèi)存空間;
將待寫(xiě)入數(shù)據(jù)賦值到所述內(nèi)存空間。
進(jìn)一步的,所述接收一個(gè)或多個(gè)生產(chǎn)者線程的寫(xiě)入指令,并根據(jù)所述寫(xiě)入指令基于原子操作向當(dāng)前隊(duì)列寫(xiě)入數(shù)據(jù),還包括:
通過(guò)調(diào)用原子函數(shù)更新所述當(dāng)前隊(duì)列的入隊(duì)位置,將所述下次準(zhǔn)備入隊(duì)的位置設(shè)置為當(dāng)前隊(duì)列的入隊(duì)位置。
進(jìn)一步的,所述接收一個(gè)或多個(gè)消費(fèi)者線程的讀取指令,并根據(jù)所述讀取指令基于原子操作從當(dāng)前隊(duì)列讀取數(shù)據(jù),包括:
通過(guò)調(diào)用讀原子函數(shù)獲取當(dāng)前隊(duì)列的出隊(duì)位置;
通過(guò)調(diào)用寫(xiě)原子函數(shù)獲取當(dāng)前隊(duì)列的入隊(duì)位置;
若所述入隊(duì)位置與所述出隊(duì)位置不相同,則將所述出隊(duì)位置對(duì)應(yīng)的內(nèi)存賦值給變量,以將所述出隊(duì)位置上的數(shù)據(jù)讀出隊(duì)列。
進(jìn)一步的,所述接收一個(gè)或多個(gè)消費(fèi)者線程的讀取指令,并根據(jù)所述讀取指令基于原子操作從當(dāng)前隊(duì)列讀取數(shù)據(jù),還包括:
通過(guò)調(diào)用原子函數(shù)更新所述當(dāng)前隊(duì)列的出隊(duì)位置,以確定下次準(zhǔn)備出隊(duì)的位置。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于武漢斗魚(yú)網(wǎng)絡(luò)科技有限公司,未經(jīng)武漢斗魚(yú)網(wǎng)絡(luò)科技有限公司許可,擅自商用是侵權(quán)行為。如果您想購(gòu)買(mǎi)此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請(qǐng)聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201810311279.3/2.html,轉(zhuǎn)載請(qǐng)聲明來(lái)源鉆瓜專利網(wǎng)。
- 用于軟件原子化的視圖
- 減少應(yīng)用中對(duì)共享存儲(chǔ)器單元執(zhí)行的順序操作的數(shù)量
- 原子操作自動(dòng)化方法、系統(tǒng)、裝置和計(jì)算機(jī)存儲(chǔ)介質(zhì)
- 一種實(shí)現(xiàn)原子操作的系統(tǒng)及方法
- 遠(yuǎn)程原子操作指令
- 數(shù)據(jù)加工方法及裝置
- 外圍組件快速互聯(lián)原子操作硬件實(shí)現(xiàn)方法、裝置及系統(tǒng)
- 一種用于復(fù)雜場(chǎng)景的多控制域安全內(nèi)核構(gòu)建方法及系統(tǒng)
- 一種多業(yè)務(wù)系統(tǒng)的業(yè)務(wù)質(zhì)量測(cè)試方法和系統(tǒng)
- 協(xié)同操作處理方法、裝置、設(shè)備以及介質(zhì)
- 隊(duì)列調(diào)度系統(tǒng)及方法
- 一種從多隊(duì)列節(jié)點(diǎn)獲取消息的方法及系統(tǒng)
- 隊(duì)列請(qǐng)求處理方法和裝置
- 一種隊(duì)列清空方法以及相關(guān)設(shè)備
- 一種基于Linux通用塊層多隊(duì)列的優(yōu)化系統(tǒng)及方法
- 一種分離存儲(chǔ)的隊(duì)列實(shí)現(xiàn)方法及裝置
- 一種數(shù)據(jù)處理方法、裝置及計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)
- 一種接口擁塞時(shí)延的計(jì)算方法及裝置
- 一種報(bào)文調(diào)度方法及裝置
- RDMA網(wǎng)絡(luò)下的網(wǎng)卡隊(duì)列創(chuàng)建方法以及裝置
- 下達(dá)讀取指令與數(shù)據(jù)讀取方法、閃存控制器與儲(chǔ)存系統(tǒng)
- 數(shù)據(jù)讀取方法、閃存控制器與閃存儲(chǔ)存系統(tǒng)
- 圖像讀取設(shè)備和圖像讀取方法
- 圖像讀取裝置
- 圖像處理裝置、圖像形成設(shè)備以及圖像處理方法
- 一種數(shù)據(jù)讀取的方法及終端
- 圖像處理裝置、圖像形成設(shè)備以及圖像處理方法
- 指令處理方法及使用所述方法的存儲(chǔ)控制器
- 磁盤(pán)數(shù)據(jù)讀取方法、裝置、計(jì)算機(jī)設(shè)備及存儲(chǔ)介質(zhì)
- 存儲(chǔ)器器件及其異步多面獨(dú)立讀取操作





