欢迎来到天天文库
浏览记录
ID:14135094
大小:50.00 KB
页数:9页
时间:2018-07-26
《线程的同步和互斥问题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验二线程的同步和互斥问题一.实验内容:编写程序实现并发线程之间的同步和互斥问题。线程间的互斥:并发执行的线程共享某些类临界资源,对临界资源的访问应当采取互斥的机制。线程间的同步:并发执行的线程间通常存在相互制约的关系,线程必须遵循一定的规则来执行,同步机制可以协调相互制约的关系。二.实验目的和要求1)了解进程同步与互斥的概念,掌握编写进程同步、互斥的实例。2)解决一类典型的进程间同步问题,如生产者-消费者问题,读者-写者问题等。三.实验方法和步骤1.实验方法掌握同步与互斥的机制,选取合适的问题,给出演示程序的设计思想,包括流程图的形式;选取C
2、、C++、VC、JAVA等计算机语言,编程调试,最终给出运行正确的程序。2.程序设计(1)线程间互斥:分析问题,创建多个线程,找出临界资源,划出正确的临界区,根据互斥机制的操作模式,编写程序。互斥机制的操作模式:p(mutex);/*关锁*/临界区的操作;v(mutex);/*开锁*/(2)线程间同步——读者-写者问题示例:在Windows2000环境下,创建一个包含n个线程的控制台进程。用这n个线程来表示n个读者或写者。每个线程按相应测试数据文件的要求,进行读写操作。请用信号量机制分别实现读者优先和写者优先的读者-写者问题。读者-写者问题的读
3、写操作限制: 1)写-写互斥; 2)读-写互斥; 3)读-读允许;运行结果显示要求:要求在每个线程创建、发出读写操作申请、开始读写操作和结束读写操作时分别显示一行提示信息,以确信所有处理都遵守相应的读写操作限制。测试数据文件格式测试数据文件包括n行测试数据,分别描述创建的n个线程是读者还是写者,以及读写操作的开始时间和持续时间。每行测试数据包括四个字段,各字段间用空格分隔。第一字段为一个正整数,表示线程序号。第二字段表示相应线程角色,R表示读者是,W表示写者。第三字段为一个正数,表示读写操作的开始时间。线程创建后,延时相应时间(单位为秒)
4、后发出对共享资源的读写申请。第四字段为一个正数,表示读写操作的持续时间。当线程读写申请成功后,开始对共享资源的读写操作,该操作持续相应时间后结束,并释放共享资源。 下面是一个测试数据文件的例子: 1R35 2W45 3R52 4R65 5W5.13 与实验相关的API介绍 在本实验中可能涉及的API有: 线程控制: CreateThread完成线程创建,在调用进程的地址空间上创建一个线程,以执行指定的函 数;它的返回值为所创建线程的句柄。 HANDLECreateThread( LPSECURITY_ATTRIBUTE
5、SlpThreadAttributes,//SD DWORDdwStackSize,//initialstacksize LPTHREAD_START_ROUTINElpStartAddress,//thread function LPVOIDlpParameter,//threadargument DWORDdwCreationFlags,//creationoption LPDWORDlpThreadId//threadidentifier ); ExitThread用于结束当前线程。 VOIDExitThread( D
6、WORDdwExitCode//exitcodeforthisthread ); Sleep可在指定的时间内挂起当前线程。 VOIDSleep( DWORDdwMilliseconds//sleeptime ); 信号量控制: CreateMutex创建一个互斥对象,返回对象句柄; HANDLECreateMutex( LPSECURITY_ATTRIBUTESlpMutexAttributes,//SD BOOLbInitialOwner,//initialowner LPCTSTRlpName//objectname
7、 ); OpenMutex打开并返回一个已存在的互斥对象句柄,用于后续访问; HANDLEOpenMutex( DWORDdwDesiredAccess,//access BOOLbInheritHandle,//inheritanceoption LPCTSTRlpName//objectname ); ReleaseMutex释放对互斥对象的占用,使之成为可用。 BOOLReleaseMutex( HANDLEhMutex//handletomutex ); WaitForSingleObject可在指定的时间内等待指
8、定对象为可用状态; DWORDWaitForSingleObject( HANDLEhHandle,//handletoobject DWORD
此文档下载收益归作者所有