当前位置:  技术问答>linux和unix

linux课程设计读者写者问题,求高手帮小弟改改错误!急呀!!!

    来源: 互联网  发布时间:2016-10-30

    本文导语:  linux课程设计,读者写者问题,好多错误呀,很多类型都一样,怎么改啊??求高手指导 要在linux下运行的,我用gcc编译的 #include "windows.h" #include  #include  #include  #include kecheng设计 #include  #include   #define READER 'R'...

linux课程设计,读者写者问题,好多错误呀,很多类型都一样,怎么改啊??求高手指导
要在linux下运行的,我用gcc编译的
#include "windows.h"
#include 
#include 
#include 
#include kecheng设计
#include 
#include 
 #define READER 'R'                   //读者
#define WRITER 'W'                   //写者
#define INTE_PER_SEC 1000            //每秒时钟中断的数目
#define MAX_THREAD_NUM 64            //最大线程数
#define MAX_FILE_NUM 32              //最大文件数目数
#define MAX_STR_LEN 32               //字符串的长度
int readcount=0;                     //读者数目
int writecount=0;                    //写者数目
CRITICAL_SECTION RP_Write;           //临界资源
CRITICAL_SECTION cs_Write;
CRITICAL_SECTION cs_Read;
struct ThreadInfo
{
      int serial;                      //线程序号
       char entity;                     //线程类别(判断是读者还是写者线程)
       double delay;                    //线程延迟时间
       double persist;                  //线程读写操作时间
}; 
///////////////////////////////////////////////////////////////////////////
// 读者优先---读者线程
//P:读者线程信息
void RP_ReaderThread(void *p)
{   //互斥变量
       HANDLE h_Mutex;
       h_Mutex=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex_for_readcount");
       DWORD wait_for_mutex;            //等待互斥变量所有权
       DWORD m_delay;                   //延迟时间
       DWORD m_persist;                 //读文件持续时间
       int m_serial;                    //线程序号
       //  从参数中获得信息
       m_serial=((ThreadInfo*)(p))->serial ;
       m_delay=(DWORD)(((ThreadInfo*)(p))->delay *INTE_PER_SEC);
       m_persist=(DWORD)(((ThreadInfo*)(p))->persist *INTE_PER_SEC);
       Sleep(m_delay);                  //延迟等待
       printf("Reader thread %d sents the reading require.n",m_serial);
       //等待互斥信号,保证对ReadCount 的访问,修改互斥
       wait_for_mutex=WaitForSingleObject(h_Mutex,-1);
       //读者数目增加
       readcount++;
       if(readcount==1)
       {              //第一个读者,等待资源
              EnterCriticalSection(&RP_Write);
       }
       ReleaseMutex(h_Mutex);            //释放互斥信号
       //读文件
      printf("Reader thread %d begins to read file.n",m_serial);
Sleep(m_persist);
      //退出线程
       printf("Reader thread %d finished reading file.n",m_serial);
       //等待互斥信号,保证对ReadCount的访问,修改互斥
       wait_for_mutex=WaitForSingleObject(h_Mutex,-1);
       //读者数目减少
        readcount--;
        if(readcount==0)
        {               //如果所有的读者读完,唤醒写者
               LeaveCriticalSection(&RP_Write);
        }
        ReleaseMutex(h_Mutex);          //释放互斥信号
}
//////////////////////////////////////////////////////////////
//P:写者线程信息
void RP_WriterThread(void *p)
{       DWORD m_delay;                   //延迟时间
       DWORD m_persist;                 //写文件持续时间
       int m_serial;                    //线程序号
       //  从参数中获得信息
       m_serial=((ThreadInfo*)(p))->serial ;
      m_delay=(DWORD)(((ThreadInfo*)(p))->delay *INTE_PER_SEC);
       m_persist=(DWORD)(((ThreadInfo*)(p))->persist *INTE_PER_SEC);
       Sleep(m_delay);
      printf("Write thread %d sents the writing require.n",m_serial);
       //等待资源
      EnterCriticalSection(&RP_Write);
       //写文件
       printf("Writer thread %d begins to write to the file.n",m_serial);
       Sleep(m_persist);
       //退出线程
printf("Write thread %d finished writing to the file.n",m_serial);
       //释放资源
       LeaveCriticalSection(&RP_Write);
}
//////////////////////////////////////////////////////////////
//读者优先处理函数
//file:文件名
void ReaderPriority(char *file)
{       DWORD n_thread=0;           //线程数目
       DWORD thread_ID;            //线程ID
       DWORD wait_for_all;         //等待所有线程结束
       //互斥对象
       HANDLE h_Mutex;
       h_Mutex=CreateMutex(NULL,FALSE,"mutex_for_readcount");
       //线程对象的数组
       HANDLE h_Thread[MAX_THREAD_NUM];
       ThreadInfo thread_info[MAX_THREAD_NUM];
       readcount=0;               //初始化readcount
       InitializeCriticalSection(&RP_Write);        //初始化临界区
       ifstream inFile;
       inFile.open (file);
       printf("Reader Priority:nn");
       while(inFile)
       {              //读入每一个读者,写者的信息
              inFile>>thread_info[n_thread].serial;
              inFile>>thread_info[n_thread].entity;
              inFile>>thread_info[n_thread].delay;
              inFile>>thread_info[n_thread++].persist;
              inFile.get();
       }
       for(int i=0;i

    
 
 

您可能感兴趣的文章:

  • 哪位高linux高手帮我改改下面的shell脚本程序,谢谢。
  • linux高人!!!帮帮小弟啊,小弟是菜鸟
  • 小弟想请教,如果现在不像装linux了怎样把linux的分区改回ntfs格式的?
  • 各位大虾,帮小弟一下,刚学linux,怎么在linux下安装硬件的驱动程序
  • 小弟求解LINUX下SHELL编程问题
  • 学习LINUX需要什么配置的机器,小弟正准备向LINUX进军,还请各位大侠指点一二!
  • 小弟想学linux,推荐几本好书,有电子版下载的最好.
  • 小弟初学LINUX,想问一下WINE的RPM包如何安装,以及WINE如何使用.谢谢
  • 哪位大哥有www server方面的源码(c++)在linux上面运行,小弟300分求!!
  • [求助]请问Linux下怎么打开exe文件啊,小弟想安装网卡驱动啊
  • 100分征集:小弟用VMware Workstation装上了linux不会上网请问如何解决?
  • 小弟第一次接触linux,求帮助,来围观啦!!!
  • 各位大狭!小弟初学Linux,请各位列举学Linux的网站,留下QQ,Email以向各位请教!!!多谢了!!!
  • 小弟想在linux下访问windows 和usb的文件系统
  • 小弟高分求“Linux 0.02版”的源代码!
  • 小弟是菜鸟,最近安装了redhat linux但不知道怎么上网。。。请大家帮助。
  • 小弟要接触Linux编程了,请大家给点建议
  • 请问如何在Linux下配置声卡?小弟在此多谢了。
  • 小弟刚刚准备接触LINUX,达人们进来啊谢谢了哦
  • 请问实时性最高的嵌入式Linux版本是什么啊!小弟钱不多,但是谢谢了!
  • 各位linux的高手,小弟有个简单问题.lunix找不到了?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux Journal宣布2009年度读者选择奖
  • 《linux设备驱动开发详解》出版热销散分100感谢读者
  • 在linux 平台下写了 个线程 模拟操作系统 读者写者问题 有错误 求教
  • 《linux设备驱动开发详解(第2版)》出版热销散分100感谢读者
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在没有linux的盘,只有DOS启动盘)
  • Linux Kernel 'sctp_v6_xmit()'函数信息泄露漏洞
  • 如何让win2000和linux共存。我装好WIN2000,再装LINUX7.0,但LILO只能找到LINUX,不能引导WIN2000
  • linux c下利用srand和rand函数生成随机字符串
  • 在windows中的VMware装了个linux,主板有两个串口,能做windows和linux的串口通信测试么,怎么测试这两个串口在linux是有效
  • Linux c++虚函数(virtual function)简单用法示例代码
  • 我们网站的服务器从windows2000迁往linux,ASP程序继续使用,可是我连LINUX的皮毛都不了解,大家告诉我LINUX下怎么建网站??
  • Docker官方镜像将会使用Alpine Linux替换Ubuntu
  • 中文Linux与西文Linus分别哪一个版是权威?I认为是:中科软的白旗Linux与西文的绿帽子Linux!大家的看法呢?
  • Linux下chmod命令详细介绍及用法举例
  • 我重装了winme,却进不了Linux了,而我现在又没有Linux光盘,也没有Linux启动盘,还有没有办法?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3