• <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>

            牽著老婆滿街逛

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

            環形緩沖區

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


            在通信程序中,經常使用環形緩沖區作為數據結構來存放通信中發送和接收的數據。環形緩沖區是一個先進先出的循環緩沖區,可以向通信程序提供對緩沖區的互斥訪問。

            1、環形緩沖區的實現原理

            環形緩沖區通常有一個讀指針和一個寫指針。讀指針指向環形緩沖區中可讀的數據,寫指針指向環形緩沖區中可寫的緩沖區。通過移動讀指針和寫指針就可以實現緩沖區的數據讀取和寫人。在通常情況下,環形緩沖區的讀用戶僅僅會影響讀指針,而寫用戶僅僅會影響寫指針。如果僅僅有一個讀用戶和一個寫用戶,那么不需要添加互斥保護機制就可以保證數據的正確性。如果有多個讀寫用戶訪問環形緩沖區,那么必須添加互斥保護機制來確保多個用戶互斥訪問環形緩沖區。

            1、圖2和圖3是一個環形緩沖區的運行示意圖。圖1是環形緩沖區的初始狀態,可以看到讀指針和寫指針都指向第一個緩沖區處;圖2是向環形緩沖區中添加了一個數據后的情況,可以看到寫指針已經移動到數據塊2的位置,而讀指針沒有移動;圖3是環形緩沖區進行了讀取和添加后的狀態,可以看到環形緩沖區中已經添加了兩個數據,已經讀取了一個數據。

            2、實例:環形緩沖區的實現

            環形緩沖區是數據通信程序中使用最為廣泛的數據結構之一,下面的代碼,實現了一個環形緩沖區:

            /*ringbuf .c*/

            #i nclude
            <stdio. h>

                #i nclude
            <ctype. h>

            #define NMAX 8

            int iput = 0/* 環形緩沖區的當前放人位置 */

            int iget = 0/* 緩沖區的當前取出位置 */

            int n = 0/* 環形緩沖區中的元素總數量 */

            double buffer[NMAX]; 

            /*  環形緩沖區的地址編號計算函數,,如果到達喚醒緩沖區的尾部,將繞回到頭部。

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

            */


            int addring (int i)

            {

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

            }


            /* 從環形緩沖區中取一個元素 */

            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;

            }


            /* 向環形緩沖區中放人一個元素*/

            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)  編輯 收藏 引用

            久久久精品人妻一区二区三区蜜桃| 国产欧美久久一区二区| 囯产极品美女高潮无套久久久| 伊人久久大香线焦AV综合影院| 久久噜噜电影你懂的| 亚洲国产香蕉人人爽成AV片久久| 综合网日日天干夜夜久久| 99久久99久久精品国产| 伊人久久大香线蕉av不变影院| 99久久精品无码一区二区毛片| 亚洲乱码精品久久久久..| 久久综合狠狠色综合伊人| 99久久这里只精品国产免费| 久久精品成人国产午夜| 久久久久久夜精品精品免费啦 | 99久久婷婷国产综合精品草原| 香蕉aa三级久久毛片| 999久久久免费国产精品播放| 欧美亚洲国产精品久久高清| 热99re久久国超精品首页| 亚洲成色www久久网站夜月| 久久天天躁狠狠躁夜夜av浪潮 | 欧美日韩精品久久久久| 久久久久女教师免费一区| 日本人妻丰满熟妇久久久久久| 亚洲精品综合久久| 久久久久久久国产免费看| 久久国产成人| 精品久久人人做人人爽综合| 亚洲午夜久久影院| 国内精品伊人久久久久影院对白 | 日日狠狠久久偷偷色综合0| 国产毛片久久久久久国产毛片| 亚洲国产成人久久综合一| 精品久久久久久综合日本| 亚洲国产成人久久精品影视| 99热热久久这里只有精品68| 99久久精品国产一区二区| 99热精品久久只有精品| 久久国产免费直播| 亚洲人成电影网站久久|