色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          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代碼,不得不佩服開發(fā)者的智慧,為了提高內核性能,一直不斷的進行各種優(yōu)化,并將業(yè)界最新的lock-free理念運用到內核中。

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

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

          linux相關文章:linux教程



          上一頁 1 2 3 4 下一頁

          關鍵詞: 編程 內核 Linux 透過

          評論


          相關推薦

          技術專區(qū)

          關閉