文章目录
atomic 原子变量
x86在多核环境下,多核竞争数据总线时,提供Lock指令进行锁总线操作。保证“读-修改-写”的操作在芯片级的原子性。
spinlock 自旋锁
自旋锁将当前线程不停地执行循环体,而不改变线程的运行状态,在CPU上实现忙等,以此保证响应速度更快。这种类型的线程数不断增加时,性能明显下降。所以自旋锁保护的临界区必须小,操作过程必须短。
semaphore 信号量
信号量用于保护有限数量的临界资源,信号量在获取和释放时,通过自旋锁保护,当有中断会把中断保存到eflags寄存器,最后再恢复中断。
mutex 互斥锁
为了控制同一时刻只有一个线程进入临界区,让无法进入临界区的线程休眠。
rw-lock 读写锁
读写锁,把读操作和写操作分别进行加锁处理,减小了加锁粒度,优化了读大于写的场景。
preempt 抢占
- 时间片用完后调用schedule函数。
- 由于IO等原因自己主动调用schedule。
- 其他情况,当前进程被其他进程替换的时候。
per-cpu 变量
linux为解决cpu 各自使用的L2 cache 数据与内存中的不一致的问题。
RCU机制 (Read, Copy, Update)
用于解决多个CPU同时读写共享数据的场景。它允许多个CPU同时进行写操作,不使用锁,并且实现垃圾回收来处理旧数据。
内存屏障 memory-barrier
程序运行过程中,对内存访问不一定按照代码编写的顺序来进行。
- 编译器对代码进行优化。
- 多cpu架构存在指令乱序访问内存的可能。
酷客网相关文章:
评论前必须登录!
注册