博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
驱动 (5) 并发与同步
阅读量:4285 次
发布时间:2019-05-27

本文共 845 字,大约阅读时间需要 2 分钟。

  • 内核并发1.0
并发分为真并发和伪并发真并发	1. 多cpu(SMP)伪并发	2. 进程调度(进程与进程)	3. 中断与进程
  • 内核并发2.0
归根接地就是这三种原因中断调度SMP但是1. 解决 中断 矛盾问题引入了软中断,也就引入了 软中断 产生的竞态2. 在 __irq_svc 返回时调度, 也就引入了内核抢占的 竞态.也就是现在有5个原因.中断调度SMP软中断 // 也就是说 软中断基于中断,如果中断被关闭,软中断产生的并发也就不需要考虑了内核抢占

各种问题及解决方案

  • 内核抢占
开关内核抢占
  • SMP
不可关 用自旋锁解决 // 自旋锁 函数中关了抢占 // 自旋锁内不能休眠 (sleep及调度)
  • 中断
开关中断
  • 调度
不可关互斥锁 //可睡眠
  • 中断底半部(包括软中断)
tasklet     中断上下文//但好像是调度出来的,为什么是中断上下文呢? 待验证.软中断    中断上下文工作队列 (线程)    进程上下文

并发及方案

  • 内核抢占导致的并发
preempt_disable preempt_enable
  • SMP导致的 并发
spinlock_t     spinlock;spin_lock_init(&spinlock);spin_lock(&spinlock);spin_unlock(&spinlock);中断中用spinlock_t     spinlock;spin_lock_irqsavespin_unlock_irqrestore
  • 中断导致的并发
local_irq_disablelocal_irq_enable
  • 调度导致的进程间并发
struct mutex mutex;mutex_init(&mutex); /*定义*/...mutex_lock(&mutex); /*获取互斥锁*/... /*临界资源*/mutex_unlock(&mutex); /*释放互斥锁*/
  • 底半部导致的并发
分为两种,一种是中断,一种是进程在上面都已经提到了.

在这里插入图片描述

转载地址:http://noigi.baihongyu.com/

你可能感兴趣的文章
PHP获取表单方法总结
查看>>
Git学习笔记总结和注意事项
查看>>
谈“穷”-----穷只是一种结果,真正穷的是思维和行动
查看>>
六位创业者分享内心最恐惧的事情
查看>>
JavaScript数值转换总结
查看>>
JavaScript中的重载解读
查看>>
浅谈JavaScript中的原型模式
查看>>
HTML的奇葩嵌套规则
查看>>
我是如何自学编程的——“3遍读书法”
查看>>
当老实人遇到世态炎凉
查看>>
程序猿,你们这么拼是找不到妹纸的!
查看>>
问题与对策:CSS的margin塌陷(collapse)
查看>>
识别“百度权重”作弊的方法
查看>>
干货|程序员常去的14个顶级开发社区
查看>>
如何添加网站for Linux(绑定域名)
查看>>
一些常被你忽略的CSS小知识
查看>>
简易博客编辑器:玩转document.execCommand命令
查看>>
你知道C/S和B/S两种架构有什么区别吗?
查看>>
【学习干货】给coder的10个读书建议
查看>>
浏览器的CSS Hacks
查看>>