进程是为了完成一项任务,执行一段程式代码,以及为完成这个任务而调用系统的一些资源如cpu、内存等资源,是独立存在的,与其它进程不能共享数据,而线程与进程很相似,颗粒度更小,在进程范围内着重关注cpu的运行状况。
一、进程的PV同步互斥操作:
P:主要特点 阻塞进程,如不需要阻塞那么就继续执行进程,通过P结合信号量,如P(S1), S1++,
S1<0那么就阻塞经常,否则继续执行进程。如S1初始值是1, P(S1)后,S1=S1-1 = -1,这时候就阻塞进程,1表示当前有一个进程正在执行,后续动作阻塞挂起,等待激活,如何进行激活,需要通过V进行控制,
V:主要特点,激活进程,但程序运行到V的时候,判断是否有激活的进程,如有激活的,就激活,这时分是否是抢占式的,如果是抢占式,被激活的进程先执行,非抢占式的则做V操作的当前进程先执行,没有激活的继续就继续执行当前进程。
因此P,V组合的算法必须结合在一起使用,才能实现进程的同步和互斥操作
P(S1) S1++
V(S1) S1--
S1是信号量,根据该信号变量的值判断后续具体执行什么操作。
举个去饭店吃菜的粒子,点了一份菜,只有厨师烧好菜,把菜盛到碗里,客人才有菜吃,否则客人吃不到菜
s1=1,s2=0
1.厨师烧菜进程
begin{厨师烧菜
p(s1)
盛到碗里
v(s2)
}
2.客人吃菜进程
begin{p(s2)
从碗里取出菜到碗里
开始吃菜
v(s1)}