回 帖 发 新 帖 刷新版面

主题:那为高手哥哥姐姐请进啊,要交作业了!!

题目一:用多线程同步方法解决生产者-消费者问题
目的:
   通过研究Linux的线程机制和信号量实现生产者消费者问题的并发控制。
说明:
有界缓冲区内设有20个存储单元,放入/取出的数据项设定为1~20这20个整型数。
要求;
(1)    每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容、当前指针位置和生产者/消费者线程的标识符。
(2)    生产者和消费者各有两个以上。
(3)    多个生产者或多个消费者之间须共享对缓冲区进行操作的函数代码。
    

提示:
(1)有界缓冲区可用数组实现。
(2)    编译命令可用:
     cc  -lpthread  -o  目标文件名  源文件名
(3)    多线程编程方法参见附件。

题目二:进程控制
目的:通过联机求助和查找阅读Linux源代码,学会使用Linux系统调用,掌握进程控制原理。
要求: 在Linux系统中编写C语言程序,创建一个子进程。父进程和子进程交替运行。父进程先显示一次“Current time:”, 然后子进程每隔一秒显示一次当前系统日期和时间,共显示三次。以上过程共循环进行五次。

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

回复列表 (共1个回复)

沙发

操作系统要做生产者与消费者的问题!
#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;}}}

我来回复

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