linux 并发控制
williamwang2013
写博客没别的意思,希望能对大家有点用。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
linux并发控制之原子操作
原子操作指的是在执行过程中不会被别的代码路径所中断的操作。分为两类:整型原子操作 和 位原子操作。特点:1.任何情况下操作都是原子的。2.都依赖底层的CPU的原子操作来实现,所以和CPU架构密切相关。注意: 1.原子操作在不同体系架构实现的方法不同,基本采用汇编实现 2.上述的整数原子函数集仅针对32位,内核中关于64位有另一套函数 3原创 2013-01-18 15:03:09 · 7059 阅读 · 0 评论 -
linux并发控制之互斥体
互斥体提供了两种机制:经典互斥体和实时互斥体分别定义于#include #include经典互斥体结构体: (会导致无限制优先级反转问题)struct mutex {/* 1: unlocked, 0: locked, negative: locked, possible waiters */atomic_t count;spinlock_twait_原创 2013-01-21 17:41:49 · 1708 阅读 · 0 评论 -
linux并发控制之读写自旋锁
读写自旋锁(rwlock)是一种比自旋锁粒度更小的自旋锁机制,它保留了“自旋”的概念。但是在写操作方面,只能最多有一个写进程,在读方面,同时可拥有多个执行单元,当然读和写也不能同时进行。一句话:防写不防读 理解推荐: http://blog.sina.com.cn/s/blog_6d7fa49b01014q86.html操作:定义于#include或#include原创 2013-01-18 17:34:03 · 2575 阅读 · 0 评论 -
linux并发控制之信号量
信号量(semaphore)是用于保护临界区的一种常用方法,它的使用方式与自旋锁类似与自旋锁相同的是,只有得到信号量的进程才能执行临界区的代码与自旋锁不同的是,当获取不到信号量的时候,进程不会在原地打转,而是进入休眠等待状态;理解:定义于#includestruct semaphore {spinlock_tlock;unsigned intcoun原创 2013-01-21 15:50:00 · 3338 阅读 · 0 评论 -
linux并发控制之完成量
完成量:表示一个执行单元需要等待另一个执行单元完成某事后方可执行。1.它是一种轻量级机制,为了完成进程间的同步而设计2.使用完成量等待时,调用进程是以独占睡眠方式进行等待的3.不是忙等待理解:定义于#include其结构体为struct completion {unsigned int done;wait_queue_head_t wait;};原创 2013-01-21 17:20:34 · 3379 阅读 · 0 评论 -
linux并发控制之读写信号量
读写信号量与信号量之间的关系类似于自旋锁与读写自旋锁。读写信号量可能会引起进程阻塞,但是它允许N个读执行单元同时访问共享资源,而最多只允许有一个写执行单元访问共享资源;因此,读写信号量是一种相对放宽条件的、粒度稍大于信号量的互斥机制。注意:信号量不允许任何操作之间有并发。理解:定义于#include 实际上在arch/X86/include/asm/rwsem.h原创 2013-01-21 16:44:09 · 1481 阅读 · 0 评论 -
linux并发控制之RCU
RCU:读-拷贝-更新众所周知,为了保护共享数据,需要一些同步机制,如自旋锁(spinlock),读写锁(rwlock),它们使用起来非常简单,而且是一种很有效的同步机制,在UNIX系统和Linux系统中得到了广泛的使用,但是它存在两个问题。1.它的开销相对于CPU速度而言就越来越大随着计算机硬件的快速发展,获得这种锁的开销相对于CPU的速度在成倍地增加,原因很简单,CPU的速度与访问原创 2013-01-21 13:50:14 · 3745 阅读 · 0 评论 -
linux并发控制之中断屏蔽
在单CPU范围内避免竞态的一个简单方法。注意: 中断对系统正常运行很重要,长时间屏蔽很危险,所以中断屏蔽后应尽可能快的执行完毕。 宜与自旋锁联合使用。使用 local_irq_disable() local_irq_enable()只能禁止和使能本地CPU的中断,所以不能解决多CPU引发的竞态 local_i原创 2013-01-18 13:43:19 · 2504 阅读 · 0 评论 -
linux并发控制之顺序锁
顺序锁是对读写锁的一种优化。 1.读执行单元绝对不会被写执行单元阻塞。即读执行单元可以在写执行单元对被顺序锁保护的共享资源进行写操作的同时仍然可以继续读,而不必等待写执行单元完成之后再去读,同样,写执行单元也不必等待所有的读执行单元读完之后才去进行写操作 2.写执行单元与写执行单元之间仍然是互斥的。 3.如果读执行单元在读操作期间,写执行单元已经发生了写操作,那么,读原创 2013-01-21 10:16:35 · 5221 阅读 · 0 评论 -
linux并发控制之自旋锁
自旋锁是一种对临界资源进行互斥访问的典型手段,其名来源于它的工作方式。通俗的讲,自旋锁就是一个变量,该变量把一个临界区标记为“我当前在运行,请等待”或者标记为“我当前不在运行,可以被使用”, 如果A执行单元首先获得锁,那么当B进入同一个例程时将获知自旋锁已被持有,需等待A释放后才能进入,所以B只好原地打转(自旋)。特点: 1.自旋锁主要针对SMP或单CPU且内核可抢占的情原创 2013-01-18 16:26:20 · 1412 阅读 · 0 评论 -
linux并发控制之总章
一.概念1.并发(concurrency)指多个执行单元同时,并行被执行。2.并发的执行单元对共享资源,(比如说,硬件资源,全局变量,静态变量等)访问很容易导致竞态(race conditions)。举个简单事例,古代皇帝有很多妃子,皇帝第一个时辰是宜妃的,第二个时辰是萱妃,最后时间是皇后的,这是原来正常的顺序。假如宜妃让皇帝赖床了,萱妃不爽了,然后萱妃时间冲突了,皇后也不爽了,竞争就原创 2013-01-18 12:59:25 · 842 阅读 · 0 评论
分享