读者写者问题 代码

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include  
#include 
using namespace std;

#define READER 'R'  //读者
#define WRITER 'W'  //写者
#define DELAY_TIME 700  //最基本的延迟时间,其他都为他的倍数
#define MAX_THREAD_NUM 64 //最大线程数
int readercount = 0; //读者数量
int writercount = 0; //写者数量
//临界区
CRITICAL_SECTION RP_Write;
CRITICAL_SECTION WP_Write;
CRITICAL_SECTION WP_Read;
//线程结构体
struct Thread{
    int serial;  //线程序号
    char entity;   //判断是读者线程还是写者线程
    double delay;   //线程延迟
    double persist; //线程写操作持续时间
};
//读者优先 读者进程
void RP_ReaderThread(void *p){
    //互斥变量
    HANDLE h_Mutex;
    h_Mutex = OpenMutex(MUTEX_ALL_ACCESS,false,"mutex");
    DWORD m_delay = (DWORD)(((Thread*)(p))->delay*DELAY_TIME); //延迟时间
    DWORD m_persist = (DWORD)(((Thread*)(p))->persist*DELAY_TIME);  //读文件持续时间 用来模拟线程活动
    int m_serial = ((Thread*)(p))->serial; //线程号
    Sleep(m_delay);
    cout<<"读者线程 "<delay*DELAY_TIME);; //延迟时间
    DWORD m_persist= (((Thread*)(p))->persist*DELAY_TIME);;  //读文件持续时间 用来模拟线程活动
    int m_serial=((Thread*)(p))->serial;; //线程号
    Sleep(m_delay);
    cout<<"写者线程 "<>threads[n_thread].serial;
        inFile>>threads[n_thread].entity;
        inFile>>threads[n_thread].delay;
        inFile>>threads[n_thread++].persist;
        inFile.get();
    }
    for(int i=0;i<(int)(n_thread);i++){
        if(threads[i].entity==READER||threads[i].entity=='r')
        {
            //创建读者线程
            h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(RP_ReaderThread),&threads[i],0,&thread_ID);
        }
        else
            //创建写者线程
            h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(RP_WriterThread),&threads[i],0,&thread_ID);
    }
    //等待所有线程结束
    WaitForMultipleObjects(n_thread,h_Thread,true,-1);
    cout<<"所有的读者和写者完成各自操作。"<delay*DELAY_TIME);
    DWORD m_persist = (DWORD)(((Thread*)(p))->persist*DELAY_TIME);
    int m_serial = ((Thread*)(p))->serial;
    Sleep(m_delay);//延迟等待
    cout<<"读者线程 "<serial;
    m_delay = (((Thread*)(p))->delay*DELAY_TIME);
    m_persist = (((Thread*)(p))->persist*DELAY_TIME);
    Sleep(m_delay);
    cout<<"写者线程 "<>threads[n_thread].serial;
        inFile>>threads[n_thread].entity;
        inFile>>threads[n_thread].delay;
        inFile>>threads[n_thread++].persist;
        inFile.get();
    }
    for(int i=0;i<(int)(n_thread);i++){
        if(threads[i].entity==READER||threads[i].entity=='r')
        {
            //创建读者线程
            h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(RP_ReaderThread),&threads[i],0,&thread_ID);
        }
        else
            //创建写者线程
            h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(RP_WriterThread),&threads[i],0,&thread_ID);
    }
     WaitForMultipleObjects(n_thread,h_Thread,true,-1);
    cout<<"所有的读者和写者完成各自操作。"<>num;
        if(num<1||num>3)
        {
            cout<<"输入无效,请重新输入"<

thread中的内容为

1 R 3 5
2 W 4 5
3 R 5 2
4 R 6 5
5 W 5.1 3

6 W 3 5
7 W 16 5
8 R 5 2 
9 W 6 5
10 R 4 3
11 R 17 7

你可能感兴趣的:(操作系统)