进程同步(synchronization):指系统中多个进程中发生的事件存在某种时序关系,需要相互合作,共同完成一项任务。形象的说。一个进程运行到某一点时,要求另一伙伴进程为它提供消息,在未获得消息之前,该进程进入阻塞态,获得消息后被唤醒进入就绪态。
进程同步机制
一、信号量及PV操作
信号量是一个特殊变量,用于进程间传递信息,通常是一个整数值,由
Dijkstra提出,最初用于解决互斥问题,信号量只有两个(0,1),称作二元信号量;
后来推广到多值,用于解决同步问题。注意信号量是一个静态的值,多个进程可以共享这个内存单元
这里我们举例定义一个信号量的结构体(也可以定义为一个单一整型)定义如下:
struct semaphore{
int count;
queueType queue;
}s;
其中count用于传递信息,进程可以挂到队列queue上
对信号量可以实施的操作只有三个:1、初始化;2、P操作;3、V操作(P、V分别是荷兰语proberen(test)和verhogen(increment))
P操作:
P(s){
s.count--;
if(s.count < 0){
//将调用P操作的进程状态置为阻塞态,并插入相应等待队列s.queue末尾;
//重新调度
}
}
V操作:
V(