云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 操作系统原理实验报告

操作系统原理实验报告

  • 62 次阅读
  • 3 次下载
  • 2025/5/4 0:23:09

{

DWORD n_thread=0; //线程数目 DWORD thread_ID; //线程ID

DWORD wait_for_all; //等待所有线程结束 //互斥对象 HANDLE h_Mutex;

h_Mutex=CreateMutex(NULL,FALSE,\

//线程对象的数组

HANDLE h_Thread[MAX_THREAD_NUM]; ThreadInfo thread_info[MAX_THREAD_NUM];

readcount=0; // 初始化 readcount

InitializeCriticalSection(&RP_Write); //初始化临界区 ifstream inFile;

inFile.open(file); //打开文件 printf(\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< (int)(n_thread);i++) {

if(thread_info[i].entity==READER || thread_info[i].entity=='R')

{

h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(RP_ReaderThread),&thread_info[i],0,&thread_ID); //创建读者线程

} else{

//创建写者线程

h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(RP_WriterThread),&thread_info[i],0,&thread_ID);

} }

//等待所有线程结束

wait_for_all=WaitForMultipleObjects(n_thread,h_Thread,TRUE,-1); printf(\}

/////////////////////////////////////////////////////////////////////////// // 写者优先--读者线程 //p:读者线程信息

void WP_ReaderThread(void* p) {

//互斥变量

HANDLE h_Mutex1;

h_Mutex1=OpenMutex(MUTEX_ALL_ACCESS,FALSE,\HANDLE h_Mutex2;

h_Mutex2=OpenMutex(MUTEX_ALL_ACCESS,FALSE,\

DWORD wait_for_mutex1; //等待互斥变量所有权

DWORD wait_for_mutex2;

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(\wait_for_mutex1= WaitForSingleObject(h_Mutex1,-1); //进入读者临界区

EnterCriticalSection(&cs_Read);

// 阻塞互斥对象mutex2,保证对readcount的访问、修改互斥 wait_for_mutex2= WaitForSingleObject(h_Mutex2,-1); //修改读者数目 readcount++; if(readcount==1) {

//如果是第一个读者,等待写者写完 EnterCriticalSection(&cs_Write); }

ReleaseMutex(h_Mutex2); //释放互斥信号mutex2 // 让其他读者进入临界区 LeaveCriticalSection(&cs_Write); ReleaseMutex(h_Mutex1); //读文件

printf(\Sleep(m_persist);

// 退出线程

printf(\// 阻塞互斥对象mutex2,保证对readcount的访问、修改互斥 wait_for_mutex2= WaitForSingleObject(h_Mutex2,-1); readcount--; if(readcount==0) {

// 最后一个读者,唤醒写者 LeaveCriticalSection(&cs_Write); }

ReleaseMutex(h_Mutex2); //释放互斥信号 }

/////////////////////////////////////////////////////////////////////////// // 写者优先--写者线程 //p:写者线程信息

void WP_WriterThread(void* p) {

DWORD m_delay; // 延迟时间 DWORD m_persist; // 写文件持续时间 int m_serial; //线程序号 DWORD wait_for_mutex3; //互斥对象

HANDLE h_Mutex3;

h_Mutex3= OpenMutex(MUTEX_ALL_ACCESS,FALSE,\

//从参数中获得信息

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); //延迟等待

搜索更多关于: 操作系统原理实验报告 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

{ DWORD n_thread=0; //线程数目 DWORD thread_ID; //线程ID DWORD wait_for_all; //等待所有线程结束 //互斥对象 HANDLE h_Mutex; h_Mutex=CreateMutex(NULL,FALSE,\ //线程对象的数组 HANDLE h_Thread[MAX_THREAD_NUM]; ThreadInfo thread_info[MAX_THREAD_NUM]; readcount=0; // 初始化 readcount

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com