• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴(yán)以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            環(huán)形緩沖區(qū)

            來源:http://blog.21ic.com/user1/3253/archives/2006/25241.html


            在通信程序中,經(jīng)常使用環(huán)形緩沖區(qū)作為數(shù)據(jù)結(jié)構(gòu)來存放通信中發(fā)送和接收的數(shù)據(jù)。環(huán)形緩沖區(qū)是一個(gè)先進(jìn)先出的循環(huán)緩沖區(qū),可以向通信程序提供對緩沖區(qū)的互斥訪問。

            1、環(huán)形緩沖區(qū)的實(shí)現(xiàn)原理

            環(huán)形緩沖區(qū)通常有一個(gè)讀指針和一個(gè)寫指針。讀指針指向環(huán)形緩沖區(qū)中可讀的數(shù)據(jù),寫指針指向環(huán)形緩沖區(qū)中可寫的緩沖區(qū)。通過移動(dòng)讀指針和寫指針就可以實(shí)現(xiàn)緩沖區(qū)的數(shù)據(jù)讀取和寫人。在通常情況下,環(huán)形緩沖區(qū)的讀用戶僅僅會(huì)影響讀指針,而寫用戶僅僅會(huì)影響寫指針。如果僅僅有一個(gè)讀用戶和一個(gè)寫用戶,那么不需要添加互斥保護(hù)機(jī)制就可以保證數(shù)據(jù)的正確性。如果有多個(gè)讀寫用戶訪問環(huán)形緩沖區(qū),那么必須添加互斥保護(hù)機(jī)制來確保多個(gè)用戶互斥訪問環(huán)形緩沖區(qū)。

            1、圖2和圖3是一個(gè)環(huán)形緩沖區(qū)的運(yùn)行示意圖。圖1是環(huán)形緩沖區(qū)的初始狀態(tài),可以看到讀指針和寫指針都指向第一個(gè)緩沖區(qū)處;圖2是向環(huán)形緩沖區(qū)中添加了一個(gè)數(shù)據(jù)后的情況,可以看到寫指針已經(jīng)移動(dòng)到數(shù)據(jù)塊2的位置,而讀指針沒有移動(dòng);圖3是環(huán)形緩沖區(qū)進(jìn)行了讀取和添加后的狀態(tài),可以看到環(huán)形緩沖區(qū)中已經(jīng)添加了兩個(gè)數(shù)據(jù),已經(jīng)讀取了一個(gè)數(shù)據(jù)。

            2、實(shí)例:環(huán)形緩沖區(qū)的實(shí)現(xiàn)

            環(huán)形緩沖區(qū)是數(shù)據(jù)通信程序中使用最為廣泛的數(shù)據(jù)結(jié)構(gòu)之一,下面的代碼,實(shí)現(xiàn)了一個(gè)環(huán)形緩沖區(qū):

            /*ringbuf .c*/

            #i nclude
            <stdio. h>

                #i nclude
            <ctype. h>

            #define NMAX 8

            int iput = 0/* 環(huán)形緩沖區(qū)的當(dāng)前放人位置 */

            int iget = 0/* 緩沖區(qū)的當(dāng)前取出位置 */

            int n = 0/* 環(huán)形緩沖區(qū)中的元素總數(shù)量 */

            double buffer[NMAX]; 

            /*  環(huán)形緩沖區(qū)的地址編號計(jì)算函數(shù),,如果到達(dá)喚醒緩沖區(qū)的尾部,將繞回到頭部。

            環(huán)形緩沖區(qū)的有效地址編號為:0到(NMAX-1)

            */


            int addring (int i)

            {

                    
            return (i+1== NMAX ? 0 : i+1;

            }


            /* 從環(huán)形緩沖區(qū)中取一個(gè)元素 */

            double get{void}

            {

            cnt pos;

            if (n>0){

                       Pos 
            = iget;

                       iget 
            = addring(iget);

                       n
            --;

                       
            return buffer[pos];

            }


            else {

            printf(“Buffer 
            is empty\n”);

            return 0.0;

            }


            /* 向環(huán)形緩沖區(qū)中放人一個(gè)元素*/

            void put(double z)

            {

            if (n<NMAX){

                       buffer[iput]
            =z;

                       iput 
            = addring(iput);

                       n
            ++;

            }


            else

            printf(“Buffer 
            is full\n”);

            }


             

            int main{void)

            {

            chat opera[
            5];

            double z;

            do {

            printf(“Please input p
            |g|e?”);

            scanf(“
            %s”, &opera);

                           
            switch(tolower(opera[0])){

                           
            case ‘p’: /* put */

                              printf(“Please input a 
            float number?”);

                              scanf(“
            %lf”, &z);

                              put(z);

                              
            break;

            case ‘g’: /* get */

                              z 
            = get();

            printf(“
            %8.2f from Buffer\n”, z);

            break;

            case ‘e’:

                              printf(“End\n”);

                              
            break;

            default:

                              printf(“
            %- Operation command error! \n”, opera);

            }
            /* end switch */

            }
            while(opera[0!= ’e’);

                
            return 0;

            }


            posted on 2008-07-11 03:38 楊粼波 閱讀(2168) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            国产成人久久精品一区二区三区| 伊人色综合久久| 久久久久人妻一区二区三区| 日产精品99久久久久久| 亚洲乱亚洲乱淫久久| 一97日本道伊人久久综合影院| 久久久久亚洲AV片无码下载蜜桃| 国产成人精品综合久久久| 午夜精品久久久久久中宇| 久久99精品国产99久久6| 东方aⅴ免费观看久久av | 精品无码久久久久久午夜| 94久久国产乱子伦精品免费| 午夜精品久久久久久99热| 午夜精品久久久久久久无码| 久久亚洲高清观看| 久久综合给久久狠狠97色| 国内精品久久久久影院亚洲| 国产激情久久久久影院老熟女免费 | 2020最新久久久视精品爱 | 精品久久久久久国产牛牛app| 久久久久免费看成人影片| 久久久久久精品无码人妻| 久久久久亚洲AV成人网| 国产99久久久国产精免费| 色综合久久88色综合天天| 77777亚洲午夜久久多喷| 天天躁日日躁狠狠久久| 国内精品久久久久久久久电影网 | 色综合久久中文字幕综合网| 国产视频久久| 国产精品成人久久久久久久 | 久久人人爽人人人人爽AV | 久久人人爽人人澡人人高潮AV | 婷婷综合久久狠狠色99h| 久久99国产精品二区不卡| 欧美综合天天夜夜久久| 久久精品这里只有精99品| 久久久这里有精品中文字幕| 久久免费视频1| 久久精品国产99久久无毒不卡|