`
hellojyj
  • 浏览: 61707 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

进程同步

 
阅读更多

Process Synchronization Problems

1、在公共汽车上,司机和售票员的工作流程如图所示。为保证乘客的安全,司机和售票员应密切配合协调工作。请用信号量来实现司机与售票员之间的同步。



 

司机和售票员工作流程图

 

 

分析:司机必须在售票员关门后才能启动车辆。在车辆启动后,售票员的售票行为和正常行车已经到站停车都没有相互制约关系。然而,售票员的开车门动作必须在司机到站停车动作完成后才能发生。因此定义司机的信号量为Driver_S ,售票员信号量为Conductor_S, init:  Driver_S = Conductor_S=0;

 

算法:

Semaphore Driver_S = 0, Conductor_S = 0;

Driver(){

       While(true){

              Wait(Driver_S)             //等待售票员关门

              StartBus();                  //启动车辆

              NormalDriving();         //正常行驶

              StopBus();                   //停车

              Signal(Conductor_S);  //允许售票员开门

}

}

 

Conductor (){

       While(true){

              closeDoor();                //关门

              signal(Driver_S);         //允许司机启动

              sellTicket();                  //售票

              wait(Conductor_S);     //等待司机停车

              openDoor();                //关门

}

}

main() 

cobegin{ 

Driver(); 

Conductor (); 

 

2、桌子上有一只盘子,盘子中只能放一只水果。爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,一个儿子专等吃盘子中的橘子,一个女儿专等吃盘子中的苹果。用wait()signal()信号量操作实现他们之间的同步机制。

 

分析:因为盘子中只能放一只水果,因此爸爸和妈妈对盘子的访问必须是互斥的,那么定义一个信号量用来互斥访问盘子Dish,儿子和女儿对苹果和橘子的需求不同因此定义苹果和橘子的信号量为Apple,Orange;init: Dish= 1, Apple=Orange = 0;

     

Semaphore Dish = 1, Apple=Orange=0;

 

Father(){

While(true){

            Wait(Dish);                  //等待盘子没有水果

            putAppleIntoDish();           //往盘子里放苹果

            signal(Apple);              //盘子有苹果,儿子可以拿

}

}

 

mother(){

While(true){

            Wait(Dish);                  //等待盘子没有水果

            putOrangeIntoDish();   //往盘子里放橘子

            signal(Orange);            //盘子有橘子,女儿可以拿

}

}

 

Son(){

While(true){

            Wait(Apple);                //等待爸爸放苹果

            pickApple();                //拿走苹果

            Signal(Dish);               //盘子可以放水果了

}

}

 

Daughter(){

While(true){

            Wait(Orange);              //等待妈妈放橘子

            pickOrange ();             //拿走橘子

            Signal(Dish);               //盘子可以放水果了

}

}

 

main() 

cobegin{ 

Father(); 

Mother();  

Son(); 

Daughter(); 

3、设有一个售票厅,可容纳100人购票。如果厅内不足100人则允许进入,进入后购票,购票后退出。如果厅内已有100人,则在厅外等候。试问:

(1)   购票者之间是同步还是互斥?

互斥关系;

(2) wait()signal()操作表达购票者的工作过程。

分析:售票厅最多能容纳100人,因此需要一个信号量empty ,来控制售票厅是否能进入。购票者之间为互斥关系,因此需要一个信号量来制约购票mutex; init: empty=100,mutex = 1;

 

Semaphore empty = 100,mutex = 1;

BuyTicketProcedure(){

      While(true){

           Wait(empty);         //售票厅允许进入

           Wait(mutex);          //没人在买票

           buyTicket();           //买票

           signal(mutex);        //退出售票窗口

           signal(empty);       //走出售票厅

      }

 

}

 

Main(){

      Cobegin(){

BuyTicketProcedure();

 

      }

}

 

  • 大小: 7.2 KB
分享到:
评论

相关推荐

    操作系统实验四 进程同步实验

    操作系统实验四的进程同步实验是深入理解并发协作进程同步与互斥的重要实践环节。通过这个实验,学生可以直观地观察到并发进程如何进行同步与互斥操作,从而增强对这两个核心概念的认识。实验报告旨在分析经典进程...

    进程同步实验报告

    在操作系统中,进程同步是一个关键的概念,用于控制多个并发进程之间的协调与合作,确保它们能够正确、有序地访问共享资源,避免数据不一致和竞态条件。本实验报告旨在通过实际操作来深入理解和掌握进程同步的基本...

    进程同步与互斥

    进程同步与互斥是操作系统中的核心概念,它们在多任务环境下确保了程序的正确执行和资源的有效利用。这里我们将深入探讨这两个概念,并结合C语言的实现进行讲解。 首先,我们来理解什么是进程同步。在多任务操作...

    操作系统实验报告_进程同步与互斥.doc

    进程同步与互斥实验报告 操作系统实验报告《进程同步与互斥》实验的主要目的是掌握基本的进程同步与互斥算法,了解生产者-消费者问题,并学习使用 Windows 2000/XP 中基本的同步对象,掌握相关 API 的使用方法。...

    进程同步(操作系统实验三,带实验报告哦,亲)

    操作系统中的进程同步是多线程或并发执行时保持系统稳定性和正确性的重要概念。这个实验主要是基于北邮操作系统课程的第三次实验,目的是让学生通过实践理解并掌握进程同步的基本原理和方法。实验使用C语言编程,并...

    操作形同实验——进程同步和互斥

    操作形同实验——进程同步和互斥 (1) 通过编写程序实现进程同步和互斥,掌握有关进程(线程)同步与互斥的原理,以及解决进程(线程)同步和互斥的算法,从而进一步巩固进程(线程)同步和互斥等有关的内容。 (2...

    进程同步之理发师问题

    在操作系统领域,进程同步是一个关键的概念,用于管理多个并发运行的进程,确保它们有序地访问共享资源,防止数据不一致和死锁的发生。理发师问题是经典的进程同步问题之一,它模拟了一个小镇上的理发店场景,其中...

    操作系统实验-信号量机制实现进程同步

    在多道程序设计中,进程同步是操作系统中的一个重要概念,它涉及到多个并发进程间的协调和通信,确保它们能正确、有序地访问共享资源,避免数据竞争和死锁等问题的发生。 信号量机制是实现进程同步的一种有效工具,...

    操作系统进程同步和互斥的实验报告

    操作系统进程同步和互斥是操作系统中至关重要的概念,它们确保了多进程或多线程环境下的资源有效管理和安全访问。本实验报告详细介绍了如何通过编程实现这一机制,并以生产者-消费者问题为实例进行演示。 实验的...

    进程同步模拟程序

    进程同步是操作系统中一个至关重要的概念,特别是在多处理器和多线程环境中,多个进程或线程可能同时访问共享资源,这就需要有效地管理它们的执行顺序,以防止数据不一致和死锁的发生。在这个"进程同步模拟程序"中,...

    进程同步C语言实验

    根据给定的文件信息,我们可以深入探讨进程同步在操作系统中的应用以及如何通过C语言实现这一概念。进程同步是操作系统中的一个关键概念,它确保多个进程能够协调地共享资源或信息,避免冲突,维持数据一致性。在多...

    进程同步模拟设计——读者和写者问题

    在操作系统领域,进程同步是一个关键的概念,用于管理多个并发进程之间的协调,确保它们能正确、高效地共享资源。本报告书将深入探讨一种经典的问题——读者和写者问题,它是进程同步中的一个典型实例,常见于多用户...

    进程同步实验代码(c语言)

    【进程同步实验】是操作系统课程中的一个重要实践环节,主要涉及多进程间的协调和资源管理。在C语言中,可以通过模拟信号量的原子操作来实现进程同步。本实验以生产者-消费者问题为背景,旨在理解和分析如何使用进程...

    进程同步经典程序MFC

    在计算机科学领域,进程同步是操作系统中的一个核心概念,它涉及到多线程和多进程环境下的资源管理和协调。MFC(Microsoft Foundation Classes)是微软提供的一套C++库,用于构建Windows应用程序,其中包括对进程...

    操作系统课程设计 进程同步与互斥 存储管理

    在这个操作系统课程设计中,我们将重点关注两个关键的进程管理概念:进程同步与互斥,以及存储管理。这些主题在现代操作系统中至关重要,理解和掌握它们对于深入理解操作系统的工作原理以及进行相关开发具有深远意义...

    经典进程同步问题(代码+文档)

    在计算机科学领域,进程同步是操作系统中的一个核心概念,它涉及到多进程间的协调与通信,以确保并发执行的进程能够正确、有序地访问共享资源。本资料包“经典进程同步问题(代码+文档)”专注于讲解和实现三个经典...

    进程同步模拟设计--司机和售票员问题

    在计算机科学领域,进程同步是操作系统中的一个关键概念,它涉及到多线程或多进程环境下的资源管理和协调。在这个“司机和售票员问题”的模拟设计中,我们将深入探讨这个主题,并结合提供的文件内容来理解这个问题的...

Global site tag (gtag.js) - Google Analytics