
concurrency_lock
文章平均质量分 60
lamdoc
这个作者很懒,什么都没留下…
展开
-
中断中的锁和(链表或其他)中的锁的区别
中断中的锁不能进入睡眠,所以一般都用自旋锁。但是在中断中使用自旋锁时,必须禁止当前CPU的其他中断,如可以使用:spin_lock_irqsave();//临界区spin_unlock_irqrestore();这个自旋锁函数,可以保存进入自旋锁前的当前CPU的中断状态,然后禁止本地中断(local_irq_disable -- 即禁止当前CPU的中断),出临界区之后,原创 2012-06-14 14:47:59 · 481 阅读 · 0 评论 -
spin_lock的一个例子:GPIO寄存器控制
mx27的GPIO控制时, 比如设置输入输出方向函数:/*! * Exported function to set a GPIO pin's direction * @param pin a name defined by \b iomux_pin_name_t * @param is_input 1 (or non-zero) for input; 0 f原创 2013-05-27 09:53:46 · 676 阅读 · 0 评论 -
阻塞_睡眠_等待队列_唤醒机制
阻塞就是睡眠,可以通过等待队列方式实现,唤醒跟睡眠是反向关系。1. 阻塞概念:阻塞操作:指执行设备操作时若不能获得资源,则挂起(即休眠),直到满足可操作的条件后再进行操作。可以提高CPU 的工作效率。Applications typically expect to block, when a request cannot satisfied immediately.So原创 2012-06-22 14:04:58 · 800 阅读 · 0 评论 -
信号量 semaphore 和 互斥体 mutex
信号量是一种睡眠机制,当一个进程试图获得一个不可用的(已经被占用)信号量时,信号量会将其推进一个等待队列,然后让他睡眠。这时处理器能重获自有,去执行其他代码。当持有的信号量可用(被释放)后,处于等待队列中的进程会被唤醒,并获得该信号量。1. 内核的信号量定义如下,与用户空间的信号量实现有所不同: struct semaphore { atomic_t co原创 2012-06-14 14:15:09 · 662 阅读 · 0 评论 -
自旋锁_读写自旋锁_顺序锁_读-拷贝-更新
自旋锁用于保护短的代码,其中只包含少量C语句,因此很快会执行完毕。进程上下文切换时,不适合用自旋锁,应该用信号量。 1. 自旋锁自旋锁最多只能被一个可执行线程持有,如果一个执行线程试图获得一个已经被别的线程所持有的自旋锁,处理器会继续执行这个线程,一直进行忙循环-自旋,等待锁重新可用。注意:这里是自旋,处理器继续执行该线程,而不是睡眠;信号量就会睡眠。也正因为不会睡眠,原创 2012-06-14 14:09:43 · 886 阅读 · 0 评论 -
屏障
rmb() --- 提供了 “读” 内存屏障,它确保跨越rmb()之前不会发生重排序。也就是rmb()之前的载入操作不会被重新排在该调用之后。wmb() --- 提供了“写”内存屏障, 如rmb()类似,区别仅仅是它针对存储,而非载入。mb() --- 即提供了读屏障,也提供了写屏障。载入和存储的动作都不会跨越屏障重新排序。read_barrier_depends() --- 是rmb原创 2012-08-01 18:43:17 · 383 阅读 · 0 评论 -
并发_竞态_中断屏蔽
并发:concurrency竟态:race condition互斥:mutex临界区:critical sections解决竟态问题的方法是对共享资源实现互斥访问。互斥访问:指一个执行单元在访问共享资源的时候,其他执行单元被禁止访问。共享资源的代码区域称为临界区,临界区需要以某种互斥机制加以保护。实现互斥的方法:中断屏蔽,原子操作,自旋锁 和 信号量。1原创 2012-06-22 14:04:17 · 384 阅读 · 0 评论 -
mutex的使用案例
这是一个mutex锁的使用案例。使用了:DEFINE_MUTEX(mydev_mutex); --- 定义并初始化一个mutexmutex_lock_interruptable(&mydev_mutex) ---- 上锁mutex_unlock(&mydev_mutex) --- 解锁#include #include #include #include原创 2012-07-31 11:06:21 · 573 阅读 · 0 评论 -
原子操作 atomic_t
1. atomic_t 定义及其原因:内核定义了atomic_t 数据类型,作为对整数计数器的原子操作的基础。typedef struct { int counter;} atomic_t;这里引入了一个特殊的数据类型,而不是直接使用int类型,原因如下:a. 让原子操作函数只接收 atomic_t 类型的操作数,可以确保原子操作只与这种特殊类型数据一起使用,进而保证了该类型数据不原创 2012-06-14 14:07:40 · 2573 阅读 · 0 评论 -
自旋锁在抢占(或非抢占)单核和多核中的作用
单核模式中,如果支持抢占模式时,可以使用自旋锁保护临界资源。多核模式一般可以用自旋锁来保护多个核之间的临界资源原创 2012-06-14 14:16:43 · 1375 阅读 · 0 评论