读者与写者同步(写者优先) - 编程技术讨论

上传人:子 文档编号:43405192 上传时间:2018-06-06 格式:DOC 页数:10 大小:17.14KB
返回 下载 相关 举报
读者与写者同步(写者优先) - 编程技术讨论_第1页
第1页 / 共10页
读者与写者同步(写者优先) - 编程技术讨论_第2页
第2页 / 共10页
读者与写者同步(写者优先) - 编程技术讨论_第3页
第3页 / 共10页
读者与写者同步(写者优先) - 编程技术讨论_第4页
第4页 / 共10页
读者与写者同步(写者优先) - 编程技术讨论_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《读者与写者同步(写者优先) - 编程技术讨论》由会员分享,可在线阅读,更多相关《读者与写者同步(写者优先) - 编程技术讨论(10页珍藏版)》请在金锄头文库上搜索。

1、读者与写者同步读者与写者同步( (写者优先写者优先) ) - - 编程技术讨论编程技术讨论读者与写者同步(写者优先) - 编程技术讨论 - 爱好者论坛 IT知识与信息普及网站爱好者网站 cfan|电脑爱好者杂志官方论坛 - Powered by Discuz!注册 登录 首页搜索银行帮助论坛道具稀饭商城饭团绿色时尚 Water_V3爱好者论坛 编程技术讨论 读者与写者同步(写者优先)返回列表 回复 发帖 发新话题发布投票发布悬赏发布辩论发布活动发布视频发布商品topo 猫 发短消息 加为好友 topo 猫 当前离线 UID910833 帖子 7 党派 阅读权限 10 注册时间 2008-12-

2、17 最后登录 2008-12-29 CFan 贫民UID910833 帖子 7 精华 0 积分 14 现金 324 cfan 币 0 在线时间 0 小时 1 楼 打印 字体大小: tT 发表于 2008-12-17 19:06 | 只看该作者 139 元抢购真品 apple 耳机!C+ 读者与写者同步(写者优先)1. 目的和要求(1)掌握基本的同步互斥算法,理解读者写者模型。(2)了解 Windows 2000/XP 中多线程的并发执行机制,线程间的同步和互斥。(3)学习使用 Windows 2000/XP 中基本的同步对象,掌握相应的 API。2. 实验内容(1)在 WINDOWS 200

3、0 环境下,创建一个控制台进程,此进程包括 6 个线程:四个读者线程和两个写者线程。(2)用信号量机制解决进程(线程)的同步与互斥问题。(3)给出结果分析3. 实验环境WindousXP 操作系统,.操作平台。4. 设计思路及方案仔细学习教材上给的伪代码,书中实现了读者优先,即如果所有的读者进程没有执行完,则写者需要一直等待最后一读者释放互斥信号 wmutex,若读者的数量很大,那么写者就会饥饿。为防止写者饥饿,必须允许在有读者进程的情况下写者进程能够获得 CPU 执行,这就是“写者优先” 。5. 实验代码及注释#include #include #include /设置信号量。HANDLE

4、rwmutex_Semaphore;/用rwrmutex_Semaphore 表示于写者与其他读者/写者互斥的访问共享数据HANDLE nrmutex_Semaphore;/nrmutex_Semaphore 用于写者等待已进入读者退出,所有读者退出前互斥写操作HANDLE rmutex_Semaphore;/该信号量初始值设为4,表示最多允许 4 个读者进程同时进行读操作void Reader(void )/创建读者进程int readcount = 0;for (int i=1;i=4;i+)WaitForSingleObject(rwmutex_Semaphore,-1);/读者写者互斥

5、WaitForSingleObject(rmutex_Semaphore,-1);/对rmutex_Semaphore 进行 P 操作readcount+;if (readcount=1)WaitForSingleObject(nrmutex_Semaphore,-1);/有读者进入互斥写操作ReleaseSemaphore(rwmutex_Semaphore,1,NULL);ReleaseSemaphore(rwmutex_Semaphore,1,NULL);/ 释放读写互斥信号量,允许其它读、写进程访问资源printf(“读者准备读/n“);printf(“读者开始读缓冲区中数据. /n“

6、);/读者读printf(“读者开始开始退出缓冲区. /n“);WaitForSingleObject(rmutex_Semaphore,-1);readcount-;if (readcount=0)ReleaseSemaphore(rwmutex_Semaphore,1,NULL);/所有读者退出允许写更新ReleaseSemaphore(rmutex_Semaphore,1,NULL);/对 rmutex_Semaphore 进行 V 操作return;void Writer(void )/创建写者进程 for (int i=1;i=2;i+)WaitForSingleObject(rwm

7、utex_Semaphore,-1);for (int k=1;k=4;k+)WaitForSingleObject(rmutex_Semaphore,-1);/禁止新读者,并等待已进入的读者退出printf(“写者准备写“);printf(“写者开始往缓冲区中写数据.“ );/写者写printf(“写者开始退出缓冲区.“);for (int z=1;z=4;z+)ReleaseSemaphore(rmutex_Semaphore,1,NULL);/ 恢复允许 rmutex 值为 4ReleaseSemaphore(rwmutex_Semaphore,1,NULL);/对 reader_Sem

8、aphore 进行 V 操作return ;void main ()HANDLE Data2;/创建 HANDLE 数组 Datarwmutex_Semaphore=CreateSemaphore(NULL,0,1,NULL);/创建互斥信号量 rwmutex_Semaphorermutex_Semaphore=CreateSemaphore(NULL,0,1,NULL);/创建互斥信号量 rmutex_Semaphorenrmutex_Semaphore=CreateSemaphore(NULL,1,1,NULL);HANDLE handle2;/创建 HANDLE 数组handle/以下是

9、创建生产着和读者进程handle0=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Writer),if (handle0=NULL)printf(“创建写者线程失败 n“);handle1=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Reader),if (handle1=NULL)printf(“创建读者线程失败 n“);return;6.取得结果运行代码后结果如下:写者准备写写者开始往缓冲区中写数据.写者开始退出缓冲区.读者准备读读者开始读缓冲区中读数据.读者开始退出缓冲区.写者准备写写者开始往缓冲区

10、中写数据.写者开始退出缓冲区.读者准备读读者开始读缓冲区中读数据.读者开始退出缓冲区. 读者准备读读者开始读缓冲区中读数据.读者开始退出缓冲区.读者准备读读者开始读缓冲区中读数据.读者开始退出缓冲区.7.总结与体会错误:试验中,信号量 PV 操作不当导致整个程序出现多出错误解决办法:参照教材读者优先,改正错误体会收获:通过这个实验,加深了对同步和互斥问题的了解,用同步互斥问题解决读者和写者问题,实现写者优先。8.参考文献1、计算机操作系统2、MSDN收藏 分享 评分 回复 引用 订阅 TOP 小伟的小伟 发短消息 加为好友 小伟的小伟 (小伟的小伟)当前离线 用户禁止访问UID135750 帖

11、子 3848 党派 阅读权限 150 注册时间 2005-2-26 最后登录 2009-7-15 荣誉版主UID135750 帖子 3848 精华 0 积分 7700 现金 191 cfan币 0 性别男 来自广西南宁市 在线时间 580 小时 2 楼 发表于 2008-12-19 12:03 | 只看该作者 :m34: :m34: 我一般都是用事件的撒小伟的 Blog0GiNr Studio回复 引用 TOP 返回列表 CFan_热点推荐新闻拌饭饭团活动专区获奖名单晒晒奖品意见箱英特尔 25 周年稀饭闲话CFan_系统与软件操作系统Windows 7 专区Windows XP 美化专区启动技

12、术讨论区网络世界网站建设安全技术讨论病毒援助区防火墙及 HIPS 交流区杀毒软件讨论区图形图像教程作品区资源分享区软件交流办公软件交流区办公软件下载共享专区精品软件下载编程技术讨论CFan_数码与硬件硬件天地硬件学堂硬件资讯区DIY 攒机配置交流网淘硬件手机公社手机诊所手机软件区手机导购区数码部落数码相机导购区数码相机资源区笔记本俱乐部询价专区上网本专区无线上网讨论CFan_饭团娱乐区水煮(谁主)稀饭?红包发放专区稀饭会员相册稀饭有声区生活图秀情感驿站网络小说专区酷影炫音游戏迷公会游戏下载区BT 游戏资源游戏讨论区体坛风云CFan_官方商城CFan 大卖场活动区晒单区建议、咨询区饭团 稀饭网团购我想要晒单区饭团答疑CFan_杂志相关电脑爱好者读编交流区电脑爱好者普及版读编交流区CFan 特约栏目:IT 讲师培训营CFan_版务管理稀饭建议、举报、投诉、版主申请区精华及授勋区会员投诉区许愿池 社区银行 感谢曾经的版主爱好者网站 ( 京 ICP 证 010182 号)|联系我们 |Archiver|WAPGMT+8, 2010-11-27 19:30. Powered by Discuz! 7.0.02001-2009 Comsenz Inc.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号