0. 基础概念
进程同步: 有逻辑的进程之间需要有一定的先后顺序;
进程互斥: 进程之间对临界资源的使用;
1. 产生背景:
由于多个进程要使用临界资源,必须对临界资源进行管理;
临界资源是一次仅允许一个进程使用的共享资源
每个进程中访问临界资源的那段程序称为临界区,或者叫临界代码。
2. 关于PV操作
P,V原语的理论不得不提到的一个人便是赫赫有名的荷兰科学家E.W.Dijkstra
在计算机操作系统中,PV操作是进程管理中的难点。
首先应弄清PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下:
P(S):①将信号量S的值减1,即S=S-1;
②如果S>=0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。
V(S):①将信号量S的值加1,即S=S+1;
②如果S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。
3. 信号量的机制:
信号量分为整型信号量有忙等情况,记录型信号量没有,只能有原子操作函数更改;
信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数。注意,信号量的值仅能由PV操作来改变。
一般来说,信号量S>0时,S表示可用资源的数量。执行一次P操作意味着请求分配一个单位资源,因此S的值减1;当S<0时,表示已经没有可用资源,请求者必须等待别的进程释放该类资源,它才能运行下去。而执行一个V操作意味着释放一个单位资源,因此S的值加1;若S£0,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。
4. 相关系统接口
semget()
5. 相关说明
虽说信号量机制毕加锁方法要好得多,但是也不是说它没有任何的缺陷。由此我们也可以清晰地看到,这种信号量机制必须有公共内存,不能用于分布式操作系统,这是它最大的弱点。
1.信号量对进程而言是共享的的,也就是说对系统来说,必须要有共享内存;
2.如果不删除信号量,它将继续在系统中存在,即使无程序在使用她也是粗次。
3.信号量也是一种有限资源,大家需要节约使用。
6. 推荐文章:
消费者生产者问题:http://blog.chinaunix.net/uid-21411227-id-1826740.html
读者写者问题:http://blog.sina.com.cn/s/blog_a3eacdb20101ct0c.html
其他博客:http://cooliron.blog.163.com/blog/static/124703138201322213632340/