<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 透過(guò)Linux內核看無(wú)鎖編程

透過(guò)Linux內核看無(wú)鎖編程

作者: 時(shí)間:2012-05-21 來(lái)源:網(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,通過(guò)代碼的注釋?zhuān)ㄐ斌w部分)可以看出,當只有一個(gè)消費者和一個(gè)生產(chǎn)者時(shí),可以不用添加任何額外的鎖,就能達到對共享數據的訪(fǎng)問(wèn)。

總結

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

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

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

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



上一頁(yè) 1 2 3 4 下一頁(yè)

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

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>