新闻中心

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 透过

评论


相关推荐

技术专区

关闭