DDD操作系统实验(六)

实验目的

  • 理解进程同步与进程互斥的概念。
  • 学会使用peterson算法、PV信号量方法解决进程同步与互斥问题。

实验内容

第一步:我们假设一种最简单producer-consumer的情况:
当前系统中有两个进程在并发执行,它们分别是producer与consumer。其中,producer与consumer共享变量counter,它们分别对counter进行了修改。附件simple_producer_consumer_peterson.c给出了这样的一种情形。

  • A. 运行该程序会出现什么后果?
  • B. 请使用peterson算法解决该问题。
  • C. 你的系统是如何调度peterson算法的?这个结果是否符合预期?

第二步:其实,我们可以使用更简单的系统调用来完成上述互斥问题。
只要定义一个互斥量mutex,然后使用系统的线程锁就可以完成上述事情。
可以参考下面的做法:

  • pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
  • pthread_mutex_lock(&mutex);
  • pthread_mutex_unlock(&mutex);

现在你可以试着将上面的peterson算法换成线程锁。

第三步:现在,我们来尝试更复杂的producer-consumer的情况
当前系统中有P_NUM+C_NUM个进程在并发执行,它们分别是P_NUM个producerC_NUM个consumer。其中,producer与consumer共享一个buffer,buffer的深度是BUF_SIZE。我们要求:一次只能有一个进程访问buffer,buffer满时不可以写,buffer空时不可以读。

现在,你可以思考下用信号量如何解决上述问题,然后参考我们的附件代码“complicated_producer_consumer.c”,观察参考代码是如何利用信号量解决问题。本部分需要你观察、运行所给的代码,掌握如何使用信号量解决进程同步问题。这个代码尽管能够实现所述功能,但也有点问题,欢迎同学们指出并完善它。

第四步:请将你的学号最后1位数字数模5,得到的结果对应接下来你需要解决的问题的序号,要根据PPT要求的输入输出来完成。如果对应的问题在PPT中没有要求,则需要自定义输入输出格式,保证整洁简单。可以在应做题目之外选择多做一题,有加分。

  1. 读者-写者问题,读者优先(PPT中有格式定义要求)
  2. 读者-写者问题,公平竞争(PPT中有格式定义要求)
  3. 读者-写者问题,写者优先(PPT中有格式定义要求)
  4. 哲学家进餐问题(需要用两种方法完成)
  5. 理发师问题

实验结果

第一步

  1. 原代码运行结果及分析
    在这里插入图片描述

  2. 你的运行结果及分析

int counter;
int turn=0;
int flag[2];
void *producer(void *param){
   
   
        flag[0] = 1;
        turn = 1;
        while(flag[1] && turn==1);
        int i;
        int a;
        for (i=0;i<10;i++){
   
   
                a=counter;
                sleep_rand_time();//or sleep(1);
                counter=a+1;
                printf(
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值