1、 有一个仓库,可以存放 A 和 B 两种产品,仓库的存储空间足够大,但要求: (1)一次只能存入一种产品(A 或 B); (2)-N < (A 产品数量-B 产品数量) < M。 其中,N 和 M 是正整数。试用“存放 A”和“存放 B”以及 P、V 操作描述产品 A 与 产品 B 的入库过程。

2、 桌子上有一只盘子,最多可容纳两个水果,每次只能放入或取出一个水果。爸爸专向盘 子放苹果(apple),妈妈专向盘子中放桔子(orange);两个儿子专等吃盘子中的桔子, 两个女儿专等吃盘子中的苹果。请用 P、V 操作来实现爸爸、妈妈、儿子、女儿之间的 同步与互斥关系。

3、 有一个理发师,一把理发椅和 N 把供等候理发的顾客坐的椅子。如果没有顾客,则理发 师便在理发师椅子上睡觉;当一个顾客到来时,必须唤醒理发师进行理发;如果理发师 正在理发时又有顾客来到,则如果有空椅子可坐,他就坐下来等,如果没有空椅子,他 就离开。为理发师和顾客各编一段程序(伪代码)描述他们的行为,要求不能带有竞争 条件。

4、 吸烟者问题。三个吸烟者在一间房间内,还有一个香烟供应者。为了制造并抽掉香烟, 每个吸烟者需要三样东西:烟草、纸和火柴。供应者有丰富的货物提供。三个吸烟者中, 第一个有自己的烟草,第二个有自己的纸,第三个有自己的火柴。供应者将两样东西放 在桌子上,允许一个吸烟者进行对健康不利的吸烟。当吸烟者完成吸烟后唤醒供应者, 供应者再放两样东西(随机地)在桌面上,然后唤醒另一个吸烟者。试为吸烟者和供应 者编写程序解决问题。

5、 面包师问题。面包师有很多面包和蛋糕,由 n 个销售人员销售。每个顾客进店后先取 一个号,并且等着叫号。当一个销售人员空闲下来,就叫下一个号。请分别编写销售人 员和顾客进程的程序。

6、 桌上有一空盘,运行存放一只水果,爸爸可向盘中放苹果,也可放桔子,儿子专等吃盘 中的桔子,女儿专等吃盘中的苹果。规定当盘中空时一次只能放一个水果供吃者取用, 用 P,V 原语实现爸爸儿子和女儿 3 个并发进程的同步。

7、 写者优先的读者--写者问题。读者-写者问题为数据库访问建立了一个模型。例如,一 个系统,其中有许多竞争的进程试图读写其中的数据,多个进程同时读是可以接受的,但如 果一个进程正在更新数据库,则所有的其他进程都不能访问数据库,即使读操作也不行。 写者优先是指当一个写者到达时,将阻止其后面的读者进入数据库,直到其离开为止。

8、 在天津大学与南开大学之间有一条弯曲的小路,这条路上每次每个方向上只允许一辆自 行车通过。但其中有一个小的安全岛 M,同时允许两辆自行车停留,可供两辆自行车已 从两端进入小路的情况下错车使用。如图所示。 下面的算法可以使来往的自行车均可顺利通过。其中使用了 4 个信号量,T 代表天大路 口资源,S 代表南开路口资源, L 代表从天大到安全岛一段路的资源,K 代表从南开到 安全岛一段路的资源。程序如下,请在空白位置处填写适当的 PV 操作语句,每处空白 可能包含若干个 PV 操作语句。

begin 
    t:=1;s:=1;l:=1;k:=1;
    cobegin
        从天大到南开的进程
            begin 
            ______(1)______
            通过 L 路段; 
            进入安全岛 M; 
            ______(2)______ 
            通过 K 路段 
            ______(3)______
        end
        从南开到天大的进程
        begin 
            略,与“从天大到南开的进程”相反。
        end 
    coend
end

9、三个进程 P1、P2、P3 互斥使用一个包含 N(N>0)个单元的缓冲区。P1 每次用 produce() 生成一个正整数并用 put()送入缓冲区某一空单元中;P2 每次用 getodd()从该缓冲区中 取出一个奇数并用 countodd()统计奇数个数;P3 每次用 geteven()从该缓冲区中取出一 个偶数并用 counteven()统计偶数个数。请用信号量机制实现这三个进程的同步与互斥活 动,并说明所定义信号量的含义。要求用伪代码描述。

results matching ""

    No results matching ""