-
大小: 5KB文件類(lèi)型: .cpp金幣: 1下載: 0 次發(fā)布日期: 2021-06-10
- 語(yǔ)言: C/C++
- 標(biāo)簽: 操作系統(tǒng)??課程設(shè)計(jì)??C++??源代碼??
資源簡(jiǎn)介
操作系統(tǒng) 課程設(shè)計(jì) C++ 讀者寫(xiě)者問(wèn)題 源代碼,寫(xiě)實(shí)驗(yàn)報(bào)告必備良品,代碼無(wú)錯(cuò),直接運(yùn)行VC
代碼片段和文件信息
#include?“stdafx.h“
#include?“windows.h“
#include?
#include?
#include?
#include?
#include?
#include?
#define?READER?‘R‘???????????????????//讀者
#define?WRITER?‘W‘???????????????????//寫(xiě)者
#define?INTE_PER_SEC?1000????????????//每秒時(shí)鐘中斷的數(shù)目
#define?MAX_THREAD_NUM?64????????????//最大線程數(shù)
#define?MAX_FILE_NUM?32??????????????//最大文件數(shù)目數(shù)
#define?MAX_STR_LEN?32???????????????//字符串的長(zhǎng)度
int?readcount=0;?????????????????????//讀者數(shù)目
int?writecount=0;????????????????????//寫(xiě)者數(shù)目
CRITICAL_SECTION?RP_Write;???????????//臨界資源
CRITICAL_SECTION?cs_Write;
CRITICAL_SECTION?cs_Read;
struct?ThreadInfo
{
?int?serial;??????????????????????//線程序號(hào)
?char?entity;?????????????????????//線程類(lèi)別(判斷是讀者還是寫(xiě)者線程)
?double?delay;????????????????????//線程延遲時(shí)間
?double?persist;??????????????????//線程讀寫(xiě)操作時(shí)間
};
//讀者優(yōu)先--讀者線程
//P:讀者線程信息
void?RP_ReaderThread(void?*p)
{
???????//互斥變量
???????HANDLE?h_Mutex;
???????h_Mutex=OpenMutex(MUTEX_ALL_ACCESSFALSE“mutex_for_readcount“);
???
???????DWORD?wait_for_mutex;????????????//等待互斥變量所有權(quán)
???????DWORD?m_delay;???????????????????//延遲時(shí)間
???????DWORD?m_persist;?????????????????//讀文件持續(xù)時(shí)間
???????int?m_serial;????????????????????//線程序號(hào)
???????//??從參數(shù)中獲得信息
???????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(“讀線程?%d?發(fā)出讀請(qǐng)求.\n“m_serial);
???????//等待互斥信號(hào)保證對(duì)ReadCount?的訪問(wèn)修改互斥
???????wait_for_mutex=WaitForSingleobject(h_Mutex-1);
???????//讀者數(shù)目增加
???????readcount++;
???????if(readcount==1)
???????{
??????????????//第一個(gè)讀者等待資源
??????????????EnterCriticalSection(&RP_Write);
???????}
???????ReleaseMutex(h_Mutex);????????????//釋放互斥信號(hào)
??????//讀文件
???????printf(“讀線程?%d?開(kāi)始讀文件.\n“m_serial);
???Sleep(m_persist);
???????//退出線程
???????printf(“讀線程?%d?結(jié)束讀文件.\n“m_serial);
???//等待互斥信號(hào)保證對(duì)ReadCount的訪問(wèn)修改互斥
???????wait_for_mutex=WaitForSingleobject(h_Mutex-1);
???????//讀者數(shù)目減少
????????readcount--;
????????if(readcount==0)
????????{
???????????????//如果所有的讀者讀完喚醒寫(xiě)者
???????????????LeaveCriticalSection(&RP_Write);
????????}
????????ReleaseMutex(h_Mutex);??????????//釋放互斥信號(hào)
}
//讀者優(yōu)先--寫(xiě)者線程
//P:寫(xiě)者線程信息
void?RP_WriterThread(void?*p)
{
???????DWORD?m_delay;???????????????????//延遲時(shí)間
???????DWORD?m_persist;?????????????????//寫(xiě)文件持續(xù)時(shí)間
???????int?m
評(píng)論
共有 條評(píng)論