Chinaunix首页 | 论坛 | 博客
  • 博客访问: 143774
  • 博文数量: 35
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: -8
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-07 23:43
文章分类
文章存档

2016年(3)

2015年(29)

2014年(3)

我的朋友

分类: LINUX

2016-08-26 13:18:18

原文地址:LINUX 内核中并发机制 作者:ispsubb

    在宏观上并行或者真正意义上的并行,可能会导致竞争。类似两条十字交叉的道路上运行的车。当他们同一时刻要经过共同的资源(交叉点)的时候,如果没有交通信号灯,就可能出现混乱。在linux 系统中也有可能存在这种情况。以内核态来说,UP(CPU)SMP(CPU), 。如下图,可能出现下面的几种组合。这里面几种组合就可能出现并发导致的竞争。当然linux 系统中也有类似交通信号灯一样的措施来避免这种竞争。主要有[……。对于我自己来说,原子操作,信号量,自旋锁这三种可能用得比较多。那么这三种有什么相同的地方,有什么区别呢?适用什么不同的场合呢?会带来什么边际效应?阅读以及查看一些资料后,要彻底弄清楚这些问题,要从其所处的环境来进行细化分类处理。是UP(CPU)还是SMP(CPU);是抢占式内核还是非抢占式内核;是在中断上下文不是进程上下文。

 

三种并发机制的简单概念。

 原子锁原子操作不可能被其他的任务给调开,一切(包括中断),针对单个变量。

 自旋锁:使用忙等待锁来确保互斥锁的一种特别方法,针对是临界区。

 信号量:包括一个变量及对它进行的两个原语操作,此变量就称之为信号量,针对是临界区。

 

几点区别:

 信号量是会产生睡眠,自旋锁是忙等待.

 信号量还可以出现在用户进程中,自旋锁只能在内核线程中使用.

 信号量只能出现在进程上下文,而自旋锁则还可以出现在中断上下文。

 信号量是进程级的(内核是代表进程来争夺资源的),自旋锁主要是用于CPU同步的.

 信号量保持期间是可以被抢占的,自旋锁保持期间抢占是失效的.

 

从以上的区别以及本身的定义可以推导出两都分别适应的场合。只考虑内核态。

 

 

 

根据自旋锁与信号量适应的场合,结合不同软硬件环境可以整理出,如下内核并发出现的情况。

阅读(2367) | 评论(0) | 转发(0) |
0

上一篇:Linux中链表的使用头文件list.h的解析

下一篇:没有了

给主人留下些什么吧!~~