嚴以律己,寬以待人. 三思而后行. GMail/GTalk: yanglinbo#google.com; MSN/Email: tx7do#yahoo.com.cn; QQ: 3 0 3 3 9 6 9 2 0 .
在通信程序中,經(jīng)常使用環(huán)形緩沖區(qū)作為數(shù)據(jù)結(jié)構(gòu)來存放通信中發(fā)送和接收的數(shù)據(jù)。環(huán)形緩沖區(qū)是一個先進先出的循環(huán)緩沖區(qū),可以向通信程序提供對緩沖區(qū)的互斥訪問。
1、環(huán)形緩沖區(qū)的實現(xiàn)原理
環(huán)形緩沖區(qū)通常有一個讀指針和一個寫指針。讀指針指向環(huán)形緩沖區(qū)中可讀的數(shù)據(jù),寫指針指向環(huán)形緩沖區(qū)中可寫的緩沖區(qū)。通過移動讀指針和寫指針就可以實現(xiàn)緩沖區(qū)的數(shù)據(jù)讀取和寫人。在通常情況下,環(huán)形緩沖區(qū)的讀用戶僅僅會影響讀指針,而寫用戶僅僅會影響寫指針。如果僅僅有一個讀用戶和一個寫用戶,那么不需要添加互斥保護機制就可以保證數(shù)據(jù)的正確性。如果有多個讀寫用戶訪問環(huán)形緩沖區(qū),那么必須添加互斥保護機制來確保多個用戶互斥訪問環(huán)形緩沖區(qū)。
圖1、圖2和圖3是一個環(huán)形緩沖區(qū)的運行示意圖。圖1是環(huán)形緩沖區(qū)的初始狀態(tài),可以看到讀指針和寫指針都指向第一個緩沖區(qū)處;圖2是向環(huán)形緩沖區(qū)中添加了一個數(shù)據(jù)后的情況,可以看到寫指針已經(jīng)移動到數(shù)據(jù)塊2的位置,而讀指針沒有移動;圖3是環(huán)形緩沖區(qū)進行了讀取和添加后的狀態(tài),可以看到環(huán)形緩沖區(qū)中已經(jīng)添加了兩個數(shù)據(jù),已經(jīng)讀取了一個數(shù)據(jù)。
2、實例:環(huán)形緩沖區(qū)的實現(xiàn)
環(huán)形緩沖區(qū)是數(shù)據(jù)通信程序中使用最為廣泛的數(shù)據(jù)結(jié)構(gòu)之一,下面的代碼,實現(xiàn)了一個環(huán)形緩沖區(qū):
posted on 2008-07-11 03:38 楊粼波 閱讀(2163) 評論(0) 編輯 收藏 引用
Powered by: C++博客 Copyright © 楊粼波