摘要:
信号量 信号量的引入 对于操作共享空间时间较长的场景,对于自旋锁的使用不太合适,自旋锁适用于快速完成的场景。因为自旋锁会关闭抢占与中断。 在执行完成之后,在开启中断与抢占。对于不能快速完成,等待时间较长的的场景,不适用于自旋锁。由此引入信号量机制, 而信号量机制的引入的特点,信号量可以使线程进入休眠 阅读全文
摘要:
自旋锁 自旋锁概念 锁有自旋与睡眠两种。当进程无法获取锁资源,该进程不会休眠,会一直循环等待,一直到资源可用。 自旋锁接口函数 接口函数定义在include\linux\spinlock.h中,接口函数: 函数名 作用 spin_lock_init(_lock) 初始化自旋锁为unlock状态 vo 阅读全文
摘要:
原子操作 原子的引入 在上篇文章并发与竞争中,由于多线程对于共享变量的访问而引入的问题,不符合程序的期望。 为了规避这个问题,引入原子操作,对共享变量不能被打断。 原子操作有两种:原子变量,原子位。 原子变量内核操作 原子变量的内核文件:include/linux/types.h 图 1 原子变量数 阅读全文
摘要:
并发与竞争 并发与竞争的提出 对于全局变量区域,不同的任务(线程)可能会访问变量区的同一变量,这种对于同一内存访问的情况,就是并发情况。而对于这种并发的问题,会引入竞争。 int a = 1; a++; 对于全局变量int a,对于其操作加1操作。 并发与竞争机理 假设有两个或者两个以上的线程A,线 阅读全文