91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 86KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發布日期: 2021-05-14
  • 語言: 其他
  • 標簽: 東華大學??

資源簡介

1 實驗目標 能夠編寫程序模擬讀者 寫者問題 2 實驗要求 在Windows2000環境下 創建一個控制臺進程 此進程包含n個線程 用這n個線程來表示n個讀者或寫者 每個線程按相應測試數據文件 后面有介紹 的要求進行讀寫操作 用信號量機制分別實現讀者優先和寫者優先的讀者 寫者問題 讀者 寫者問題的讀寫操作限制 包括讀者優先和寫者優先 : 1 寫 寫互斥 即不能有兩個寫者同時進行寫操作 2 讀 寫互斥 即不能同時有一個線程在讀 而另一個線程在寫 3 讀 讀允許 即可以有一個或多個讀者在讀 讀者優先的附加限制:如果一個讀者申請進行讀操作時已有另一個讀者正在進行讀操作 則該讀者可直接開始讀操作 寫者優先的附加限制:如果一個讀者申請進行讀操作時已有另一寫者在等待訪問共享資源 則該讀者必須等到沒有寫者處于等待狀態后才能開始讀操作 運行結果顯示要求:要求在每個線程創建 發出讀寫操作申請 開始讀寫操作和結束讀寫操作時分別顯示一行提示信息 以確定所有處理都遵守相應的讀寫操作限制 ">1 實驗目標 能夠編寫程序模擬讀者 寫者問題 2 實驗要求 在Windows2000環境下 創建一個控制臺進程 此進程包含n個線程 用這n個線程來表示n個讀者或寫者 每個線程按相應測試數據文件 后面有介紹 的要求進行讀寫操 [更多]

資源截圖

代碼片段和文件信息

#include??“windows.h“
#include??
#include??
#include??
#include??
#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_ACCESSFALSE“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);
??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);
??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(“Writer?thread?%d?sents?the?writing?require.\n“m_serial);
???EnterCriticalSection(&RP_Write);
???printf(“Writer?thread?%d?begins?to?write?the??file.\n“m_serial);
???Sleep(m_persist);
???printf(“Writer?thread?%d?finishing?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(NULLFALSE“mutex_for_readcount“);

HANDLE?h_Thread[MAX_THREAD_NUM];//?線程對象的數組
ThreadInfo?thread_info[MAX_THREAD_NUM];
readcount=0;
InitializeCriticalSection(&RP_Write);
ifstream?inFile;
inFile.open(file);
printf(“Reader?Priority:\n\n“);
while(inFile)//讀人每一個讀者、寫者的信息
{
inFile>>thread_info[n_thread].serial;
????????inFile>>thread_info[n_thread].entity;
????????inFile>>t

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????????43??2013-10-16?17:05??thread.dat
?????文件????????8394??2013-10-16?17:20??讀者寫者問題.cpp
?????文件??????137728??2014-02-12?00:23??實驗報告.doc

評論

共有 條評論