Linux并发与同步
ch3rry
每天早上醒来,看见你和阳光都在,这就是我想要的未来。
展开
-
Linux并发与同步专题
并发访问:多个内核路径同时访问和操作数据,就有可能发生相互覆盖共享数据的情况,造成被访问数据的不一致。临界区:访问和操作共享数据的代码段。并发源:访问临界区的执行线程或代码路径。在内核中产生并发访问的主要有如下4种:中断和异常:中断发生后,中断处理程序和被中断的进程之间有可能产生并发访问。中断<==>被中断的线程 软中断和tasklet:软中断或者tasklet...转载 2019-06-25 12:48:55 · 151 阅读 · 0 评论 -
Linux并发与同步专题 (1)原子操作和内存屏障
1. 原子操作1.1 一个原子操作例子思考1.2 原子操作APIatomic_t数据结构表示原子变量,它的实现依赖于不同的体系结构。typedef struct { int counter;} atomic_t;Linux提供了很多操作原子变量的API。以arch/arm/include/asm/atomic.h为例。#define ATOMI...转载 2019-06-25 12:50:41 · 402 阅读 · 0 评论 -
Linux并发与同步专题 (5) 读写锁
在多线程程序中,有一种读写者的问题,即对某些资源的访问,存在两种可能的情况,一种是访问必须排他的,称为写操作;另外一种访问是可共享的,称为读操作。 处理读写着问题的两种常见策略是:强读者同步和强写者同步在强读者同步过程中,总是给读者优先权,只要写着当前没有进行写操作,读者就可以获得访问权。在强写者同步过程中,通常将优先权先交给写者,而将读者延迟到所有等待的或者活动的写者都完成为止...原创 2019-06-25 15:04:00 · 237 阅读 · 0 评论 -
Linux并发与同步专题 (2)spinlock
关键词:wfe、FIFO ticket-based、spin_lock/spin_trylock/spin_unlock、spin_lock_irq/spin_lock_bh/spin_lock_irqsave。spinlock同一时刻只能被一个内核代码路径持有,如果有另外一个内核代码路径试图获取一个已经被持有的spinlock,那么该内核代码路径需要一直自旋忙等待,直到锁持有者释放了该锁。...转载 2019-06-25 21:46:21 · 426 阅读 · 0 评论 -
Linux并发与同步专题 (3) 信号量
关键词:Semaphore、down()/up()。1. 信号量数据结构数据机构struct semaphore用于描述信号量。/* Please don't access any members of this structure directly */struct semaphore { raw_spinlock_t lock;---------...转载 2019-06-25 21:51:02 · 219 阅读 · 0 评论 -
Linux并发与同步专题 (4) Mutex互斥量
关键词:mutex、MCS、OSQ。信号量是在并行处理环境中对多个处理器访问某个公共资源进行保护的机制,mutex用于互斥操作。信号量的count初始化为1,down()/up()也可以实现类似mutex的作用,那为什么还要单独实现mutex机制呢?mutex的语义相对于信号量要简单轻便一些,在锁争用激烈的测试场景下,mutex比信号量执行速度更快,可扩展性更好,另外mutex数...转载 2019-06-25 21:52:42 · 659 阅读 · 0 评论