linux---内核笔记
内核延时
- msleep(1)---阻塞式延时1ms
- mdelay(1)---非阻塞式延时1ms
semaphore
- 用于进程和进程之间的同步
- 允许有多个进程进入临界区代码执行
- 进程获取不到信号量锁会陷入休眠,让出cpu
- 信号量本质是基于进程调度器,UP和SMP下的实现无差异。
- 被信号量锁保护的临界区代码允许睡眠,这是和自旋锁最大的区别之一。
- 不支持进程和中断之间的同步,这是和自旋锁最大的区别之一。
spinlock
- feature
1.spinlock是一种死等的机制
2.spinlock一次只能有一个执行单元获取锁进入临界区,其他执行单元只能在门口不断死等。
3.spinlock要求执行时间短。由于死锁的特性,若临界区执行时间太长,则其它执行单元要在临界区门口不断死等,极度浪费cpu资源。
4.spinlock可以在中断上下文执行。(由于不睡眠???) - scene
1.void spin_lock(spinclock *lock)//进程和进程间的同步
2.void spin_lock_bh(spinclock *lock)//涉及和本地软中断间的同步
3.void spin_lock_irq(spinclock *lock)//涉及和本地硬件中断间的同步
4.void spin_lock_irqsave(lock,flags)//涉及和本地硬件中断间的同步并保存本地中断状态。
5.int spin_trylock(spinlock_t *lock)//尝试获取锁,成功返回0
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通