这是我参与11月更文挑战的第22天,活动详情查看:2021最后一次更文挑战
Hello,你好呀,我是灰小猿,一个超会写bug的程序猿!
身为一名浪漫的程序员,应该如何深入的实现进程同步嘞?今天就来和小猿一探究竟吧😇**【文中程序员表情包大赏】!**
上一篇文章和大家讲了对实现进程同步的方法的探究。今天就继续来和大家分享如何使用信号量机制来解决问题,以及进程同步的原理分析。
1.3 使用信号量机制解决问题
使用信号量机制所要解决的问题还是进程的互斥和同步问题。那么这两种问题又是如何实现的呢?
1.3.1 实现互斥关系
假设两个进程PA,PB具有互斥关系,也就是他们要使用通同一个临界资源,对于这种情况应该怎么做呢?我们可以设置一个mutex信号量,初值设为1,这样在最开始的时候,两个进程都能使用该资源,在进程PA使用资源的时候,首先会调用wait函数让资源数减一,wait函数完成之后会让信号量mutex-1,这样mutex的值此时为0,另一个进程PB就不能使用该资源了,在进程PA使用完资源以后会调用signal函数释放资源,让信号量mutex+1,mutex此时会重新变成1,另一个进程PB就可以使用该临界资源了。
semaphore mutex=1;
PA(){
while(1){
wait(mutex);
临界区
signal(mutex);
剩余区
}
}
PB(){
while(1){
wait(mutex);
临界区
signal(mutex);
剩余区
}
}
1.3.2 实现前驱关系
假设P1和P2有前驱关系,P1执行完,P2才能执行,那么这种应该怎么实现呢?这时可以设置一个公共的信号量S,初值设为0。
进程P1中:S1;signal(S);
进程P2中:wait(S);S2;
上面语句的意思是,先执行P1的语句,然后释放S,也就是S++,这样当P2执行完wait函数之后才可以执行,否则,不执行signal函数的话,S就为0,P2也无法执行,这样就实现了P1和P2的前驱关系。
所以在这一篇文章中,主要也就是讲了在Java中如何使用信号量机制来解决进程同步的相关问题与原理,不知道小伙伴们理解了没有,接下来的一篇文章,,我们将通过实验的方式来对上面描述的实现进程同步和互斥的问题进行实验。验证这种方式的实际使用性。
浪漫的程序员朋友。你学会了吗?评论区留言,说出你认为最浪漫的程序员情话!
觉得不错,记得🤞🏻一键三连🤞🏻哟!
**我是灰小猿,我们下期见!**💘💘💘