原子操作、信号量、读写信号量和自旋锁的API

原子操作、信号量、读写信号量和自旋锁的API

ID:37591033

大小:232.33 KB

页数:9页

时间:2019-05-25

原子操作、信号量、读写信号量和自旋锁的API_第1页
原子操作、信号量、读写信号量和自旋锁的API_第2页
原子操作、信号量、读写信号量和自旋锁的API_第3页
原子操作、信号量、读写信号量和自旋锁的API_第4页
原子操作、信号量、读写信号量和自旋锁的API_第5页
资源描述:

《原子操作、信号量、读写信号量和自旋锁的API》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Linux内核的同步机制,第1部分Page1of9Linux内核的同步机制,第1部分级别:初级杨燚(yang.yi@bmrtech.com),计算机科学硕士2005年8月15日本系列文章分两部分,第一部分详细地介绍了Linux内核中的同步机制:原子操作、信号量、读写信号量和自旋锁的API,使用要求以及一些典型示例。第二部分将详细介绍在Linux内核中的另外一些同步机制,包括大内核锁、读写锁、大读者锁、RCU和顺序锁。一、引言在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象多进程

2、多线程编程一样也需要一些同步机制来同步各执行单元对共享数据的访问。尤其是在多处理器系统上,更需要一些同步机制来同步不同处理器上的执行单元对共享的数据的访问。在主流的Linux内核中包含了几乎所有现代的操作系统具有的同步机制,这些同步机制包括:原子操作、信号量(semaphore)、读写信号量(rw_semaphore)、spinlock、BKL(BigKernelLock)、rwlock、brlock(只包含在2.4内核中)、RCU(只包含在2.6内核中)和seqlock(只包含在2.6内核中)。

3、本文的下面各章节将详细讲述每一种同步机制的原理、用途、API以及典型应用示例。二、原子操作所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位,因此这里的原子实际是使用了物理学里的物质微粒的概念。原子操作需要硬件的支持,因此是架构相关的,其API和原子类型的定义都定义在内核源码树的include/asm/atomic.h文件中,它们都使用汇编语言实现,因为C语言并不能实现这样的操作。原子操作主要用于实现资源计数,很多引用计数(r

4、efcnt)就是通过原子操作实现的。原子类型定义如下:typedefstruct{volatileintcounter;}atomic_t;volatile修饰字段告诉gcc不要对该类型的数据做优化处理,对它的访问都是对内存的访问,而不是对寄存器的访问。原子操作API包括:atomic_read(atomic_t*v);该函数对原子类型的变量进行原子读操作,它返回原子类型的变量v的值。atomic_set(atomic_t*v,inti);该函数设置原子类型的变量v的值为i。http://www.

5、ibm.com/developerworks/cn/linux/l-synch/part1/2010-1-14Linux内核的同步机制,第1部分Page2of9voidatomic_add(inti,atomic_t*v);该函数给原子类型的变量v增加值i。atomic_sub(inti,atomic_t*v);该函数从原子类型的变量v中减去i。intatomic_sub_and_test(inti,atomic_t*v);该函数从原子类型的变量v中减去i,并判断结果是否为0,如果为0,返回真,否

6、则返回假。voidatomic_inc(atomic_t*v);该函数对原子类型变量v原子地增加1。voidatomic_dec(atomic_t*v);该函数对原子类型的变量v原子地减1。intatomic_dec_and_test(atomic_t*v);该函数对原子类型的变量v原子地减1,并判断结果是否为0,如果为0,返回真,否则返回假。intatomic_inc_and_test(atomic_t*v);该函数对原子类型的变量v原子地增加1,并判断结果是否为0,如果为0,返回真,否则返回假

7、。intatomic_add_negative(inti,atomic_t*v);该函数对原子类型的变量v原子地增加I,并判断结果是否为负数,如果是,返回真,否则返回假。intatomic_add_return(inti,atomic_t*v);该函数对原子类型的变量v原子地增加i,并且返回指向v的指针。intatomic_sub_return(inti,atomic_t*v);该函数从原子类型的变量v中减去i,并且返回指向v的指针。intatomic_inc_return(atomic_t*v)

8、;该函数对原子类型的变量v原子地增加1并且返回指向v的指针。http://www.ibm.com/developerworks/cn/linux/l-synch/part1/2010-1-14Linux内核的同步机制,第1部分Page3of9intatomic_dec_return(atomic_t*v);该函数对原子类型的变量v原子地减1并且返回指向v的指针。原子操作通常用于实现资源的引用计数,在TCP/IP协议栈的IP碎片处理中,就使用了引用计数,碎片队列结构structipq

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。