2.4进程同步

●主要任务:是对多个相关进程在执行次序_上进行协调,以使并发执行的诸
进程能有效地共享资源和相互合作,从而使程序的执行具有可再现性。
●用来实现同 步的机制被称作同步机制。

2.4.1 进程同步的基本概念

1、两种形式的制约关系

2、临界资源

在计算机中有许多资源只能允许-一个进程使用,如果多个进程同时访问使用这些资源,则可能造成系统混乱,这些资源称作临界资源(即一次仅允许一个进程访问的资源)。

生产者-消费者问题

有一群生产者进程在生产产品,并将这些产品提供给消费者进程去消费。

为使生产者进程与消费者进程能并发执行,在两者之间设置了一个具有n个缓冲区的缓冲池,生产者进程将它所生产的产品放入一个空缓冲区中;消费者进程可从一个满缓冲区中取走产品去消费。

尽管所有的生产者进程和消费者进程都是以异步方式运行的,但它们之间必须保持同步,即不允许消费者进程到一个空缓冲区去取产品;也不允许生产者进程向一个已装满产品且尚未被取走的缓冲区中投放产品。






说明counter为什么定义为临界资源

临界区

每个进程中访问临界资源的那段代码


4、同步机制应遵循的规则

2.4.2 硬件同步机制

1、关中断

进入锁测试之前关闭中断,直到完成锁测试之后才能打开中断。保证了对锁测试和关锁操作的连续性和完整性,有效地保证了互斥。

2.利用TS(Test-and-Set)硬件指令实.
现互斥
Boolean TS(boolean *lock){
Boolean old;
old=*lock;
*lock=TRUE;
return old;
}

3.利用Swap指令实现进程互斥
Void swap(boolean *a, boolean *b)
boolean temp;
temp=*a;
*a=*b;
*b=temp;
利用Swap指令实现互斥的循环进程:
do{.
key=TRUE;
do {
swap(&lock, &key);
} while (key!=FALSE);
临界区操作;
lock=FALSE; .
} while (TRUE);

2.4.3 信号量机制

1、整形信号量


wait相当于‘s-1’
signal相当于‘s+1’


2、记录型信号量



3、AND型信号量

在两个进程中都要包含两个对Dmutex和
Emutex的操作,
即
process A:                   process B:
wait(Dmutex);                wait(Emutex);
wait(Emutex);                wait(Dmutex);

若进程A和B按下述次序交替执行wait操作:
process A:    wait(Dmutex);    Dmutex=0
process B:    wait(Emutex);    Emutex=0
process A:    wait(Emutex);    Emutex=-1   A阻塞
process B:    wait( Dmutex);   Dmutex=-1   B阻塞
我们称此时的进程A和B已进入死锁状态。

4、信号量集


2.4.4 信号量的应用

1、利用信号量实现进程互斥



2、PV操作实现进程同步



2.4.5 管程机制



管程构成部分






你可能感兴趣的:(2.4进程同步)