新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 透過Linux內核看無鎖編程

        透過Linux內核看無鎖編程

        作者: 時間:2012-05-21 來源:網絡 收藏

        */

        unsignedint__kfifo_put(structkfifo*fifo,

        unsignedchar*buffer,unsignedintlen)

        {

        unsignedintl;

        len=min(len,fifo->size-fifo->in+fifo->out);

        /*firstputthedatastartingfromfifo->intobufferend*/

        l=min(len,fifo->size-(fifo->in(fifo->size-1)));

        memcpy(fifo->buffer+(fifo->in(fifo->size-1)),buffer,l);

        /*thenputtherest(ifany)atthebeginningofthebuffer*/

        memcpy(fifo->buffer,buffer+l,len-l);

        fifo->in+=len;

        returnlen;

        }

        /*

        *__kfifo_get-getssomedatafromtheFIFO,nolockingversion

        *Notethatwithonlyoneconcurrentreaderandoneconcurrent

        *writer,youdon'tneedextralockingtousethesefunctions。

        */

        unsignedint__kfifo_get(structkfifo*fifo,

        unsignedchar*buffer,unsignedintlen)

        {

        unsignedintl;

        len=min(len,fifo->in-fifo->out);

        /*firstgetthedatafromfifo->outuntiltheendofthebuffer*/

        l=min(len,fifo->size-(fifo->out(fifo->size-1)));

        memcpy(buffer,fifo->buffer+(fifo->out(fifo->size-1)),l);

        /*thengettherest(ifany)fromthebeginningofthebuffer*/

        memcpy(buffer+l,fifo->buffer,len-l);

        fifo->out+=len;

        returnlen;

        }

        以上代碼摘自2。6。10,通過代碼的注釋(斜體部分)可以看出,當只有一個消費者和一個生產者時,可以不用添加任何額外的鎖,就能達到對共享數據的訪問。

        總結

        通過對比2。4和2。6代碼,不得不佩服開發者的智慧,為了提高內核性能,一直不斷的進行各種優化,并將業界最新的lock-free理念運用到內核中。

        在實際開發過程中,進行無鎖設計時,首先進行場景分析,因為每種無鎖方案都有特定的應用場景,接著根據場景分析進行數據結構的初步設計,然后根據先前的分析結果進行并發模型建模,最后在調整數據結構的設計,以便達到最優。

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        linux相關文章:linux教程



        上一頁 1 2 3 4 下一頁

        關鍵詞: 編程 內核 Linux 透過

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 凤山县| 玉田县| 宜兰县| 阿尔山市| 汤阴县| 庐江县| 皮山县| 靖宇县| 襄城县| 怀集县| 温宿县| 广南县| 衡南县| 天柱县| 双桥区| 景洪市| 茌平县| 蓬莱市| 兴国县| 扎兰屯市| 乌鲁木齐市| 东港市| 芜湖县| 马公市| 谷城县| 图们市| 盐津县| 珠海市| 沭阳县| 天峻县| 凤阳县| 申扎县| 卓资县| 萍乡市| 彭州市| 富平县| 荃湾区| 莫力| 宝清县| 清水河县| 遂昌县|