当前位置: 首页 >> 程序设计 >> 进程的同步与互斥
 

进程的同步与互斥

作者:JerryCircle      来源:http://blog.csdn.net/JerryCircle     发表时间:2006-11-27     浏览次数:      字号:    

 在操作系统中,使用PV操作对进程中的临界区进行同步与互斥。PV操作都是一个原语,是不会被打断的。PV操作针对的是信号量,所谓信号量,就是记录某信号当前状态的一个量。

       从直观上来理解,P操作就是测试信号量S的是否有资源,若没有,则加入到S的等待队列中;V操作就是释放对S的资源,并唤醒S的等待队列中的第一个进程。

       一般来说,比较经典的互斥与同步的问题有:生产者与消费者问题,读者写者问题,哲学家就餐问题,巴拿马运河问题,等等。下面对这些问题进行分析。

       生产者与消费者问题,现在考虑最简单的情况,只有一个生产者和一个消费者,且只有一个缓冲区,那么,消费者必须在生产者生产后(缓冲区非空)才能取产品消费,即他们之间是同步的关系;生产者生产后必须在缓冲区未满时送出产品;那么,定义一个信号量S1(初值为0)来标识缓冲区非空,信号量S2(初值为1)来标识缓冲区非满。

       对于消费者,其操作为:

              while(true)

              {

                     PS1);

                     取产品;

                     VS2);

                     消费

              }

       对于生产者,其操作为:

              while(true)

              {

                     消费;

                     PS2);

                     送产品;

                     VS1);

              }

       当然,这是最简单的生产者与消费者问题,在大多数情况下,生产者和消费者往往是多个的,缓冲也是多个的,那么,就需要加入互斥的操作,会稍微复杂一点,在此不再赘述。

       读者写者问题是这样的,有一群写者和一群读者,写者在写同一本书,读者也在读这本书,多个读者可以同时读这本书,但是,只能有一个写者在写书,并且,读者必写者优先,也就是说,读者和写者同时提出请求时,读者优先。当读者提出请求时需要有一个互斥操作,另外,需要有一个信号量S来当前是否可操作。

       对于读者,其操作为:

              while(true)

              {

                     Pmutex);

readCount++

                     ifreadCount==1

                            PS);

                     Vmutex);

                     读书

                     Pmutex);

                     readCount--

                     ifreadCount==1

                            VS);

                     Vmutex);

              }

       对于写者,其操作为:

              while(true)

              {

                     PS);

                     写;

                     VS);

              }

关于哲学家就餐问题和巴拿马问题,也都是很经典的问题,限于时间问题,笔者不准备再做详细的分析。

总之,PV操作在进程的同步于互斥中起着至关重要的作用,在多线程的编程中也是经常会用到。

 

责任编辑 webmaster

 
 
 
 
 
评论更多>>
 
 
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •