资源描述:
《读者及写者同步(写者优先) - 编程技术讨论》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、读者与写者同步(写者优先)-编程技术讨论读者与写者同步(写者优先)-编程技术讨论-爱好者论坛IT知识与信息普及网站—爱好者网站cfan
2、《电脑爱好者》杂志官方论坛-PoweredbyDiscuz!注册登录首页搜索银行帮助论坛道具稀饭商城饭团绿色时尚Water_V3爱好者论坛»编程技术讨论»读者与写者同步(写者优先)返回列表回复发帖发新话题发布投票发布悬赏发布辩论发布活动发布视频发布商品topo猫发短消息加为好友topo猫当前离线UID910833帖子7党派阅读权限10注册时间2008-12-17最后登录2008-12-29CFan贫民UID9108
3、33帖子7精华0积分14现金324cfan币0在线时间0小时1楼打印字体大小:tT发表于2008-12-1719:06
4、只看该作者139元抢购真品apple耳机![C++]读者与写者同步(写者优先)1.目的和要求(1)掌握基本的同步互斥算法,理解读者写者模型。(2)了解Windows2000/XP中多线程的并发执行机制,线程间的同步和互斥。(3)学习使用Windows2000/XP中基本的同步对象,掌握相应的API。2.实验内容(1)在WINDOWS2000环境下,创建一个控制台进程,此进程包括6个线程:四个读者线程和两个写者线程。(2)用信号量机制解决进程(线程)的同步
5、与互斥问题。(3)给出结果分析3.实验环境WindousXP操作系统,VC++6.0操作平台。4.设计思路及方案仔细学习教材上给的伪代码,书中实现了读者优先,即如果所有的读者进程没有执行完,则写者需要一直等待最后一读者释放互斥信号wmutex,若读者的数量很大,那么写者就会饥饿。为防止写者饥饿,必须允许在有读者进程的情况下写者进程能够获得CPU执行,这就是“写者优先”。5.实验代码及注释#include#include#include//设置信号量。HANDLErwmutex_Semaphore;//用rwr
6、mutex_Semaphore表示于写者与其他读者/写者互斥的访问共享数据HANDLEnrmutex_Semaphore;//nrmutex_Semaphore用于写者等待已进入读者退出,所有读者退出前互斥写操作HANDLErmutex_Semaphore;//该信号量初始值设为4,表示最多允许4个读者进程同时进行读操作voidReader(void)//创建读者进程{intreadcount=0;for(inti=1;i<=4;i++){WaitForSingleObject(rwmutex_Semaphore,-1);//读者写者互斥WaitForSingleObje
7、ct(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");//读
8、者读printf("读者开始开始退出缓冲区.../n");WaitForSingleObject(rmutex_Semaphore,-1);readcount--;if(readcount==0)ReleaseSemaphore(rwmutex_Semaphore,1,NULL);//所有读者退出允许写更新ReleaseSemaphore(rmutex_Semaphore,1,NULL);//对rmutex_Semaphore进行V操作}return;}voidWriter(void)//创建写者进程{for(inti=1;i<=2;i++){WaitForSingleO
9、bject(rwmutex_Semaphore,-1);for(intk=1;k<=4;k++)WaitForSingleObject(rmutex_Semaphore,-1);//禁止新读者,并等待已进入的读者退出printf("写者准备写");printf("写者开始往缓冲区中写数据...");//写者写printf("写者开始退出缓冲区...");for(intz=1;z<=4;z++)ReleaseSemaphore(rmutex_Semaphore,1,NULL);//恢复允许rmutex值为4ReleaseSema