kk-并发控制和处理

    1. 什么是并发,竞态
    2. 竞态的解决方式
    3. 实际中如何灵活应用

     

    ## 什么是并发,竞态

    1. 并发(concurrency): 并发是指多个执行单元同时,并行的执行
    2. 竞态(race conditions): 并发的执行单元对共享资源(硬件资源(比如只有一个i2c,一个uart),全局变量等)的访问容易发生数据混乱
    3. 竞态发生的情况

        1 对称多处理器(SMP)的多个CPU,smp是一种紧耦合,共享存储的系统模型,它的特点是多个CPU使用共同给的系统总线,因此可以访问共同的外设和存储器。(多个CPU可以粗略理解为多个线程)

        2 CPU内进程与抢占它的进程--2.6的内核支持抢占调度,一个进程在内核执行的时候可能被另一高优先级进程打断

        3 中断(硬中断,软中断, tasklet,底半部)与进程之间:中断可以打断正在执行的进程,处理中断的程序和被打断的进程间也可能发生竞态,此外中断也可以被新的更高优先级的中断打断,因此,多个中断之间本身也可能引起并发而导致竞态。

    ## 竞态的解决方法

        解决竞态问题的途径是保证对共享资源的互斥访问,访问共享资源的代码区称为临界区,临界区要互斥机制保护linux设备驱动中常见的互斥机制有以下方式:中断屏蔽,原子操作,自旋锁,信号量

    ## 实际中如何灵活应用

    1 中断屏蔽

    1 基本概念:在单CPU中避免竞态的一种简单方法是在进入临界区之前屏蔽系统的中断,由于linux的异步I/O,进程调度等很多内容都依靠中断,所以我们应该尽快的执行完临界区的代码,换句话就是临界区代码应该尽量少

     

     

    总结:
        并发和竞态广泛存在,中断屏蔽原子操作自旋锁信号量都是解决并发问题的机制,中断屏蔽很少单独被使用,原子操作只能针对整数进行,因此自旋锁和信号量应用最为广泛

     

     

    http://www.cnblogs.com/wrjvszq/p/4286968.html?utm_source=tuicool&utm_medium=referral





posted @ 2016-03-11 09:32  xiaoweishine  阅读(141)  评论(0编辑  收藏  举报