Chinaunix首页 | 论坛 | 博客
  • 博客访问: 964050
  • 博文数量: 145
  • 博客积分: 1302
  • 博客等级: 中尉
  • 技术积分: 1778
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-07 16:00
文章分类

全部博文(145)

文章存档

2018年(1)

2016年(1)

2015年(6)

2014年(4)

2013年(59)

2012年(32)

2011年(36)

2009年(1)

2007年(2)

2006年(3)

分类: LINUX

2013-03-08 13:26:20

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) 释放自旋锁。
阅读(1175) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~