無鎖的環形隊列

#ifndef _RingQueue_H_
#define _RingQueue_H_
#include <memory.h>
template<class T, unsigned int MAX_LEN = 1024>
class RingQueue
{
public://-----------------------------------------------------// 構造//-----------------------------------------------------
    RingQueue(){m_nHead = 0;m_nTail = 0;}//-----------------------------------------------------// 析構//-----------------------------------------------------~RingQueue(){}//-----------------------------------------------------// 重置,清空隊列//-----------------------------------------------------void    Reset(){m_nHead = 0;m_nTail = 0;}//-----------------------------------------------------// 取得最多讀取個數//-----------------------------------------------------unsigned int        GetMaxReadSize(){int size = (m_nTail - m_nHead + MAX_LEN) % MAX_LEN;return size;}//-----------------------------------------------------// 取得最多寫入個數//-----------------------------------------------------unsigned int        GetMaxWriteSize(){int size = (m_nHead - m_nTail + MAX_LEN - 1) % MAX_LEN; return size;}//-----------------------------------------------------// 添加數據//-----------------------------------------------------bool    PushData(const T* pData, unsigned int nLength = 1){if (pData == nullptr || nLength > GetMaxWriteSize()){return false;}if (m_nTail + nLength <= MAX_LEN){memcpy(m_Buffer + m_nTail, pData, nLength * sizeof(T));m_nTail = (m_nTail + nLength) % MAX_LEN;}else{unsigned int size1 = MAX_LEN - m_nTail;unsigned int size2 = nLength - size1;memcpy(m_Buffer + m_nTail, pData, size1 * sizeof(T));memcpy(m_Buffer, pData+size1, size2 * sizeof(T));m_nTail = size2;}return true;}//-----------------------------------------------------// 取出并刪除數據//-----------------------------------------------------bool    PopData(T* pData, unsigned int nLength = 1){if (pData == nullptr || nLength > GetMaxReadSize() || nLength <= 0){return false;}if (m_nHead + nLength <= MAX_LEN){memcpy(pData, m_Buffer + m_nHead, nLength * sizeof(T));m_nHead    = (m_nHead + nLength) % MAX_LEN;}else{unsigned int size1 = MAX_LEN - m_nHead;unsigned int size2 = nLength - size1;memcpy(pData, m_Buffer + m_nHead, size1 * sizeof(T));memcpy(pData + size1, m_Buffer, size2 * sizeof(T));m_nHead = size2;}return true;}//-----------------------------------------------------// 查看數據 不刪除//-----------------------------------------------------bool    PeekData(T* pData, unsigned int nLen){if (nLen > GetMaxReadSize() || nLen <= 0){return false;}if (m_nHead + nLen <= MAX_LEN){memcpy(pData, m_Buffer + m_nHead, nLen * sizeof(T));}else{unsigned int size1 = MAX_LEN - m_nHead;unsigned int size2 = nLen - size1;memcpy(pData, m_Buffer + m_nHead, size1 * sizeof(T));memcpy(pData + size1, m_Buffer, size2 * sizeof(T));}return true;}//-----------------------------------------------------// 刪除數據//-----------------------------------------------------bool    DeleteData(unsigned int nLen){if (nLen > GetMaxReadSize() || nLen <= 0){return false;}if (m_nHead + nLen <= MAX_LEN ){m_nHead    = (m_nHead + nLen) % MAX_LEN;}else{m_nHead = nLen - (MAX_LEN - m_nHead);}return true;}public:T    m_Buffer[MAX_LEN];    // 數據區
private:unsigned int    m_nHead;                        // 隊頭unsigned int    m_nTail;                        // 隊尾

};#endif

?

轉載于:https://www.cnblogs.com/zzyoucan/p/4216454.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257794.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257794.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257794.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

三相濾波器怎么接線_單相電機和三相電機怎么接線?為什么三相電機有3或6個接線柱?...

于電機接線柱的鏈接方法&#xff0c;下面整理了從單相和三相的接法及三個接線柱和六個接線柱的區別等知識&#xff0c;跟各位電工朋友分享&#xff0c;希望在實際操作中能幫到各位。單相電機一般是指用單相交流電源(AC220V)供電的小功率單相異步電動機。這種電機通常在定子上有…

天文望遠鏡(四)

買天文望遠鏡有段日子了&#xff0c;除了第一天到貨時帶著兒子體驗了一回&#xff0c;后來由于接連霧霾&#xff0c;基本成了裝飾。 兒子在這期間也提出要用望遠鏡&#xff0c;但都沒有找到合適的機會&#xff0c;說到底還是有些主觀原因。 昨天周末空氣質量不錯&#xff0c;站…

360計算機報名支付不了,為什么我的電腦使用360瀏覽器后無法登陸網...

2018-07-25 15:59龔崇松 客戶經理若您在密碼、驗證碼輸入框遇到紅色的小叉子等&#xff0c;則說明您的瀏覽器未成功下載我行的ActiveX安全控件&#xff0c;請您進行以下操作&#xff1a; (1)登錄工行門戶網站&#xff1b;(2)點擊“個人網上銀行登錄”下方的“安裝”。進入下一個…

Android源碼編譯全過程記錄(基于最新安卓5.1.0)【轉】

本文轉載自&#xff1a;http://blog.csdn.net/drg1612/article/details/44802533 我的編譯條件&#xff1a; 1 Ubuntu Kylin 14.04 長期支持版 下載地址 &#xff1a; http://www.ubuntu-china.cn/download 2 我的電腦是聯想G470 i3處理器 內存4G&#xff0c;120g固體硬盤&…

第三方登錄接入-qq,weibo-java

開發之前 需求&#xff1a;網站接入qq,sina微博登錄&#xff0c;本文最后付效果圖&#xff1a; 說明&#xff1a;大部分網站本身是需要用戶概念的&#xff0c;很多操作依附于用戶&#xff0c;而qq或微博作為一種登錄方式指向用戶而已&#xff0c;我參考了一下其他網站的做法&am…

python替換img的路徑為新的路徑_以“五智”為核心 南寧電信打造5G時代數字家庭新路徑...

來源&#xff1a;通信信息報本報訊(特約記者 許輝堅)近日&#xff0c;中國電信廣西南寧分公司在協助廣西自治區通信管理局主辦的“電信用戶委員會體驗活動”中&#xff0c;以發揮用戶委員會的平臺和紐帶作用&#xff0c;促進持續改善電信服務質量為主題&#xff0c;以“五智”能…

0118——RTLabel和正則表達式

RTLabel和RegexKitLite都要導入第三方庫 使用Regexkitlite庫進行正則表達式的解析 1.庫是使用MRR&#xff0c;如果在ARC工程里面使用這個類&#xff0c;必須在project->build phases->compile resources里面將regexKitLite.m的編譯指令設為&#xff1a;-fno-objc-arc 2.需…

熱帶雨林繪畫軟件測試,兒童畫教程|色彩練習與思維創想——好熱鬧的熱帶雨林!...

課程類型綜合創意繪畫課程參考課時90分鐘工具材料勾線筆、水彩筆、卡紙課程構思小朋友們知道嗎&#xff1f;熱帶雨林是地球上抵抗力和穩定性最高的生態系統&#xff0c;常年氣候非常的炎熱&#xff0c;雨量充沛&#xff0c;沒有明顯的季節差異&#xff0c;生物群落演替速度極快…

對于一個IE8兼容性問題的反思

近期做了一個需求&#xff0c;功能非常easy&#xff0c;把用戶的優惠券數量讀取出來&#xff0c;然后顯示到“用戶中心”上。開發完畢后。別的瀏覽器正常。可是到IE8上就不行了。并且&#xff0c;按下F12之后&#xff0c;就又能夠載入出來了。首先&#xff0c;找了前端人員&…

Grunt + Bower—前端構建利器

目前比較流行的WEB開發的趨勢是前后端分離。前端采用重量級的Javascript框架&#xff0c;比如Angular&#xff0c;Ember等&#xff0c;后端采用restful API的Web Service服務&#xff0c;通過JSON格式進行數據交互。 對于后端服務語言來說&#xff0c;不論是Ruby的rake&#xf…

apache服務器性能診斷,Apache服務器性能評測

。51Testing軟件測試網m#z"fX}0H:P{(bHP~bd7h5z7I(Sn3H01.比較現有T2000 Apache2.2.8經過優化前后的效果51Testing軟件測試網 R4VsR^4MO!G7fWebserver IP&#xff1a;10.56.234.3151Testing軟件測試網e{]Q/\(p|優化前httpd.conf&#xff1a;da*Z"[d0----------------…

Linux命令行編輯快捷鍵

2019獨角獸企業重金招聘Python工程師標準>>> ctrl ? 撤消前一次輸入 ctrl c 另起一行 ctrl r 輸入單詞搜索歷史命令 ctrl u 刪除光標前面所有字符相當于VIM里d shift^ ctrl k 刪除光標后面所有字符相當于VIM里d shift$ 刪除 ctrl d 刪除光標所在位置上的字符…

kali裝電腦_Kali Linux可以安裝到平板電腦嗎?

在用Windows的電腦上克隆Kali插入U盤.運行Win32 Disk Imager.選擇Kali Linux ISO文件作為被克隆的文件,然后核實要克隆的U盤是否正確.克隆完成后,從Windows機器安全彈出U盤.現在你可以用U盤啟動Kali Linux了.在用Linux的電腦上克隆Kali在Linux環境下制作可啟動的Kali Linux U盤…

思科查看服務器啟動配置文件,啟動配置檢查UCS

本文解釋如何使用UCS將啟動功能和命令迅速執行配置狀態檢查。UCS將啟動功能允許用戶迅速執行一粗略檢查為了保證刀片適當地配置允許BIOS繼續。意志啟動配置檢查是驗證CPU和DIMM配置。此檢查迅速幫助用戶調試啟動問題。思科UCS在意志啟動配置檢查提供幾個工具幫助。這些工具包括…

lnmp下配置虛擬主機

一&#xff1a;首先熟悉幾個命令 which php ---> which是通過 PATH環境變量到該路徑內查找可執行文件&#xff0c;所以基本的功能是尋找可執行文件 whereis php ----> 將和php文件相關的文件都查找出來 service php-fpm/nginx/mysqld restart 重啟服務 二&…

AssetBundle.CreateFromFile的有趣事情

有趣的事情發生了&#xff1a; [MenuItem("AssetBundles/Build AssetBundles")] staticvoid BuildABs () { AssetBundleBuild[] buildMap new AssetBundleBuild[1]; buildMap [0].assetBundleName "test.assetbundle";//打包的資源包名稱 string[] resou…

[cocos2dx筆記010]用于UI的事件管理器

cocos2dx有一個編輯器&#xff1a;cocostudio。眼下來說&#xff0c;已經是比較好用了。僅僅要載入導出的資源。就能夠用上了。省去手動搭建面的麻煩。可是。非常多須要事件的地方&#xff0c;操作比較麻煩&#xff0c;所以這里提供一個事件管理器來集中和簡化管理事件。對于C事…

異形3×3魔方還原教程_【理論篇】三階魔方4.33千億億種變化是怎么計算出來的?...

本篇文章主要介紹三階魔方總狀態數是如何計算出來的&#xff0c;并介紹了兩種算法&#xff0c;盡量保證語言通俗易懂&#xff0c;不涉及高深的理論知識&#xff08;當然我也不懂&#xff1a;P&#xff09;一、4.33千億億到底有多大&#xff1f;我們都知道三階魔方的總變化狀態數…

Jquery 對話框確認

$("#aa").click(function(){if(confirm("是否繼續")){$(#aa).fadeOut(500);} }) 轉載于:https://www.cnblogs.com/chen-lhx/p/5149469.html

datazen Active Directory AD 配置

今天苦心經營的datazen 鏈接AD&#xff0c;文檔已經無法吐槽了簡單的幾句話&#xff0c;根本不夠用。 先說一下鏈接AD 的好處吧&#xff0c; 1 首先免去設置密碼的麻煩&#xff0c;因為直接用AD賬號的密碼。 2 更安全&#xff0c;因為客戶可不想自己的自己的系統&#xff0c;開…