Chinaunix首页 | 论坛 | 博客
  • 博客访问: 229981
  • 博文数量: 59
  • 博客积分: 1215
  • 博客等级: 少尉
  • 技术积分: 575
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-09 02:18
文章分类

全部博文(59)

文章存档

2012年(53)

2011年(6)

分类: 嵌入式

2012-01-30 01:50:48

这次咱们讲第七章的内容。

这一章是关于并发控制的。讲了几个并发控制的方法:

第一种方法是中断屏蔽。内核中断屏蔽时间必须短。

local_irq_disabel()和local_irq_enabel()这种方法只能该禁止和使能本CPU内的中断,因此不能解决SMP多CPU引发的竞态。适宜与自旋锁联合使用。

local_irq_save(flags)除了进行禁止中断外,还保存当前CPU中断位信息。

local_bh_disable()只禁止中断底半部。

第二个方法是原子操作。分为整形和位原子操作。具体看书。

第三个方法是自旋锁,自旋锁是忙等锁,可能导致系统死锁和注意不能在锁定期间调用可能引起进程调度的函数。自旋锁读写一视同仁,而读写自旋锁支持同时读。顺序锁是对读写锁的优化,读执行单元绝不会被写执行单元阻塞。对于读写同时进行的概率比较小的情况,性能是非常好的,而且允许读写同时进行,因而更大地提高了并发性。RCU在读执行单元不需要获得任何锁就可以访问,使用写执行单元在访问是需先拷贝一个副本,然后对副本进行修改,最后使用一个回调机制在适当的时机把只想原来数据的指针重新指向新的被修改的数据。RCU可以看做读写锁的高性能版本,但是写操作比较都的时候除外。

第四个方法是信号量。与自旋锁不同,信号量获取不到的时候灰烬如休眠等待状态。还有一种同步机制叫完成量。  书上将自旋锁与信号量做了很好的比较,这里大概说说:

1.当锁不能获取到的时候,比较进程上下文的切换时间和临界区执行的时间,判断用哪种锁。

2.信号量的临界区可阻塞,而自旋锁阻塞的话就死锁了。

3.因为信号量存在于进程上下文中,如果被保护的共享资源需要在中断或软中断情况下使用,则只能选自旋锁。

 

第五个是互斥体。

阅读(1486) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~