操作系统实验进程同步与互斥.docx
操作系统实验进程同步与互斥实验目的1 .掌握进程同步和互斥原理,理解生产者-消费者模型;2 .学习Windows2000xp中的多线程并发执行机制;3 .学习使用WindoWSSDK解决读者,写者问题。试验内容1依据生产者,消费者模型,在WindOWS2000/xp环境下创建一个控制台进程,在该进程中创建n个线程模拟生产者和消费者,实现进程(线程)的同步与互斥,分析、熟悉生产者消费者问题仿真的原理和实现技术。(见附件2)试验内容2参考实验内容1和附件2伪码,编程解决读者,写者问题的程序。(具体要求和读写者问题原始伪码内容见附件1)相关知识Windows2000/XP的线程控制CreateThread完成线程创建,在调用进程的地址空间上创建一个线程,以执行指定的函数;它的返回值为所创建线程的句柄。ExitThread用于结束当前线程。SuspendThread可挂起指定的线程。ReSUnIeThread可激活指定线程,它的对应操作是递减指定线程的挂起计数,当挂起计数减为。时,线程恢复执行。Windows2000/XP的进程互斥和同步在WindoWS2000/XP中提供了临界区、互斥对象、信号量对象同步对象和相应的系统调用,用于进程和线程同步。临界区对象(CritiCalSection)只能用于在同一进程内使用的临界区,同一进程内各线程对它的访问是互斥进行的。相关APl包括:InitializeCriticalSection对临界区对象进行初始化;EnterCriticalSection等待占用临界区的使用权,得到使用权时返回;TryEnterCriticalSection非等待方式申请临界区的使用权;申请失败时,返回0;LeaveCritica1Seetion释放临界区的使用权;DeleteCriticalSection释放与临界区对象相关的所有系统资源。互斥对象(MUteX)互斥对象相当于互斥信号量,在一个时刻只能被一个线程使用。有关的API:CreatCMUteX创建一个互斥对象,返回对象句柄;OpenMutex返回一个已存在的互斥对象的句柄,用于后续访问;ReleaseMutex释放对互斥对象的占用,使之成为可用;信号量对象(Semaphore)信号量对象的取值在0到指定最大值之间,用于限制并发访问的线程数。有关的API:CreateSeInaPhOre创建一个信号量对象,指定最大值和初值,返回对象句柄;OPenSemaPhore返回一个己存在的信号量对象的句柄,用于后续访问;ReleaseSemaphore释放对信号量对象的占用;同步对象等待对于这些同步对象,Windows2000/XP提供了两个统一的等待操作WaitForSing1ebject和WaitForMultipleObjectso(1)WaitForSing1ebject在指定的时间内等待指定对象为可用状态(SignaICdstate);DWORDWaitForSingleObject(HANDLEhHandle,/handleofobjecttowaitforDWORDClwMilliseconds/time-outintervalinmilliseconds(2)WaitForMultipleObjects½fa定的时间内等待多个对象为可用状态;DWORDWaitForMultipleObjects(DWORDnCount,对象句柄数组中的句柄数;CONSTHANDLE*lpHandles,/指向对象句柄数组的指针,数组中可包括多种对象句柄;BOOLbWaitAll,/等待标志:TRUE表示所有对象同时可用,FALSE表示至少一个对象可用;DWORDdwMiIliseconds/等待超时时限;);