<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 透過Linux內(nèi)核看無鎖編程

          透過Linux內(nèi)核看無鎖編程

          作者: 時(shí)間:2012-05-21 來源:網(wǎng)絡(luò) 收藏

          */

          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,通過代碼的注釋(斜體部分)可以看出,當(dāng)只有一個(gè)消費(fèi)者和一個(gè)生產(chǎn)者時(shí),可以不用添加任何額外的鎖,就能達(dá)到對(duì)共享數(shù)據(jù)的訪問。

          總結(jié)

          通過對(duì)比2。4和2。6代碼,不得不佩服開發(fā)者的智慧,為了提高內(nèi)核性能,一直不斷的進(jìn)行各種優(yōu)化,并將業(yè)界最新的lock-free理念運(yùn)用到內(nèi)核中。

          在實(shí)際開發(fā)過程中,進(jìn)行無鎖設(shè)計(jì)時(shí),首先進(jìn)行場(chǎng)景分析,因?yàn)槊糠N無鎖方案都有特定的應(yīng)用場(chǎng)景,接著根據(jù)場(chǎng)景分析進(jìn)行數(shù)據(jù)結(jié)構(gòu)的初步設(shè)計(jì),然后根據(jù)先前的分析結(jié)果進(jìn)行并發(fā)模型建模,最后在調(diào)整數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì),以便達(dá)到最優(yōu)。

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

          linux相關(guān)文章:linux教程



          上一頁 1 2 3 4 下一頁

          關(guān)鍵詞: 編程 內(nèi)核 Linux 透過

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();