回 帖 发 新 帖 刷新版面

主题:求助:操作系统课程设计

有2题,任选一题~望各位GGJJ们帮忙,小弟我这先谢了!

一.用多线程同步方法解决生产者-消费者问题

目的:通过研究Linux 的线程机制和信号量实现生产者消费者问题的并发控制.

说明:有界缓冲区内设有20个存储单元,放入/取出的数据项社顶为1-20这20个整型数.

要求:(1)每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容,当前指针位置和生产者/消费者县城的标识符.(2)生产者和消费者各有两个以上.(3)多个生产者或多个消费者之间须有共享对缓冲区进行操作的函数代码.

提示:(1)游街缓冲区可用数组实现.(2)编译命令可用cc -lpthread -o 目标文件名 源文件名.


二:进程控制

目的:通过联机求助和查找阅读Linux源代码,学会使用Linux系统调用,掌握进程控制原理.

要求:在Linux系统中编写C语言程序,创建一个子进程.父进程和子进程交替运行.父进程先显示一次"Current time:",然后子进程每隔一秒显示一次当前系统日期和时间,共显示3次,以上过程共循环五次.

提示:(1)显示当前系统日期和时间,可利用time和ctime等系统调用.
     (2)要查time和ctime等系统调用的使用方法,可用键盘命令man2time求住.
     (3)查找头文件,比如,time.h,可用find/-name time.h -print 键盘命令来做.
     (4)延迟1秒用系统调用sleep.
     (5)创建子进程用系统调用fork.

回复列表 (共6个回复)

沙发

高手进来撒  怎么没有人做呀

板凳

操作系统要做生产者与消费者的问题!
#include<stdio.h>
#include<math.h>
int buffer[4];
int wait[100];
p()
{printf("producer==1.\n");
printf("consumer==2.\n");
printf("exit==0.\n");}
main()
{int a=1,empty=4,full=0,i=0,j=0,t=0,m,b,k=0;
clrscr();
p();
while(a!=0)
{printf("a=");
scanf("%d",&a);
switch(a)
{
case 1:
printf("the producer is  ");
scanf("%d",&m);
empty=empty-1;
if(empty<0)
{wait[t]=m;
printf("the buffer is full\n");

{printf("%d is in wait queue\n",wait[t]);}
t=(t+1) % 100;
break;}
d: buffer[i]=m;
   i=(i+1) % 4;
   full=full+1;
   if(full<=0)
     goto c;
   break;
   case 2:
     full=full-1;
     if(full<0)
     {printf("the buffer is empty\n");break;}
      else
c:    {printf("the consumer is  ");
      b=buffer[j];
      printf("%d\n",b);
      j=(j+1) % 4;
      empty=empty+1;
      if(empty<=0)
      {m=wait[k];
      k=(k+1) % 100;
      goto d;}}

      break;
   case 0:
    break;}}}
这是用c语言编写的

3 楼

能不能解释一下啊?还有怎么操作

4 楼

能不能解释一下啊

5 楼

楼上高手不来了吗?呵呵 看来还是得自己读一下代码了 夏天挺懒的 算了 但还是得谢谢楼上的 我正好能利用一下代码

6 楼


我的操作系统课程设计的题目与之相关,也是关于进程通信的问题。
具休内容我已将其放到了网上,有兴趣的话可以通过如下链接查看

http://yxy.ujs.edu.cn/hygl.htm/software/os.htm

我来回复

您尚未登录,请登录后再回复。点此登录或注册