回 帖 发 新 帖 刷新版面

主题:[原创]模拟多线程程序(C++实现)

操作系统老师布置的作业,我是我们班级第一个实现的,成就感异常,这里公布一下源代码!


#include<iostream.h>
#include<time.h>
#include<stdlib.h>
#include<string.h>


class multithread   //多线程类
{
      private:
              char s[1000];       //某线程工作状态字符型记录数组
              int sum;        //某个对象存储状态的字符串型数组的个数
              
      public:
       multithread(){xpiot=0;for(int i=0;i<1000;i++)s[i]=' ';};  
              ~multithread(){};
              void randcpu();            //产生某个线程某一次所需的CPU时间的随机函数
              void randio();             //产生某个线程某一次所需的外围io设备时间的随机函数
              void store();       //存储线程记录函数
              void print();       //输出运行结果
     static int sumtime;    //系统总时间
     int xpiot;      //当前线程与其后io运行时间之和
};

int multithread::sumtime=0;

void  multithread::randcpu()
{
    int temp;
         temp=rand()%3+1;
    for(sum=sumtime;sum<sumtime+temp;sum++)
    s[sum]='+';
         sumtime+=temp;    
}

void  multithread::randio()
{
   int temp;
   temp=rand()%3+3;
   for(sum=sumtime;sum<sumtime+temp;sum++)
    s[sum]='-';
        xpiot=sumtime+temp;     
}

void  multithread::store()
{
   
   for(sum=xpiot;sum<sumtime-xpiot;sum++)
    s[sum]=' ';
}

void  multithread::print()
{
   int i;
   for(i=0;i<xpiot;i++)
    cout<<s[i];
}


void main()
{
      int a=0,b=0;
      multithread mth[4];
   time_t t;
      srand((unsigned) time(&t));
   while(a!=32)
       {
          
              if(mth[b].xpiot<=mth[b].sumtime)
              {
                 mth[b].store();
                 mth[b].randcpu();
                  mth[b].randio();
        a++;
     b=(b+1)%4;
              }
    else
    {
     mth[b].sumtime++;
    }
  
   }
      for(b=0;b<4;b++)
      {
          mth[b].print();
          cout<<endl;      
      }
}

回复列表 (共21个回复)

沙发

对于线程,我还不是很了解,你能不能再详细的讲解一下啊!谢谢![em2]

板凳

你放到机器上面运行一下,再看一下我的注释就会明白了,呵呵

3 楼

楼主写得不错!思想

4 楼

你这根本不是多线程编程,只有一个主线程。建议看看有关线程的资料

5 楼

意思是到了,但不是真的模拟OS多线程,在主函数里定义的multithread对象,按说都应该是这个进程的一个线程,而你的只是一个数组,建议用链队列把就绪的线程按先来先服务的方法入队(可以在multithread类的构造函数里实现),出队运行,时间片到把它入队,我想这才是和OS的模拟,不管你在主函数里定义多少个multithread对象,它都会自动入就绪队,先来先服务,不过你要想一想怎么有效的保存未能完成的线程里的数据,不知道OS是如何保存未能完成的线程里的数据的,谁知道说一下原理,我们模拟一下!个人意见!![em2]

6 楼

多谢楼上的意见哦!

7 楼

不错,继续努力

8 楼

谢谢楼上的鼓励啦!

9 楼

好久没有上这个区了,看到自己的贴在居然被加精了,不甚惊喜!
多谢版主的鼓励,一定再接再厉啦!

10 楼

楼上兄弟,有什么关于线程的书介绍,谢谢!

正要用关于这方面的资料!

[em12]

我来回复

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