1: 并发和竟态
1): 并发,多个额执行单元同时被执行。
2): 竞态:并发的执行单元对共享资源(硬件资源和软件上的全局变量等)的访问导致的竞争状态。
两个机制克服上面并发和竞态的解决方案。
1):信号量。会引起调用着的睡眠锁。有多个持有者,保持时间比较长。
1): 定义信号量。 struct semaphore
2): 初始化信号量。 sema_init()信号量的初始值。
说明:
函数init_MUTEX()把信号量赋值为1.
函数init_MUTEX_LOCKED把信号量赋值为0.
信号量的定义:
1): DECLARE_MUTEX(name)定义一个信号量name,并初始化值为1.
2): DECLARE_MUTEX_LOCKED(name)定义一个信号量name,并初始化值为0.创建时就锁住。
3): 函数down,down_interruptible,down_killable都是获取信号量。在于获取后的状态。down_interruptible可被信号和中断唤醒。
4): 信号量的使用up。
2):自旋锁。不会引起调用者的睡眠。属于盲等。只能允许一个持有者,保持时间非常短。
1): 初始化自旋锁。spin_lock_init(x).
2): 获取自旋锁。spin_lock(lock) 获取不成功就一直在原地获取。spin_trylock试图获取自旋锁,立刻返回。
3): 释放自旋锁。spin_unlock(lock) 释放自旋锁。
阅读(1203) | 评论(0) | 转发(0) |