操作系统实验-线程同步.doc
文本预览下载声明
实验六 线程的同步
实验目的
进一步掌握Windows系统环境下线程的创建与撤销。
熟悉Windows系统提供的线程同步API。
使用Windows系统提供的线程同步API解决实际问题。
实验准备知识:相关API函数介绍
等待对象
等待对象(wait functions)函数包括等待一个对象(WaitForSingleObject())和等待多个对象(WaitForMultipleObject())两个API函数。
等待一个对象
WaitForSingleObject()用于等待一个对象。它等待的对象可以为以下对象之一。
·Change ontification:变化通知。
·Console input: 控制台输入。
·Event:事件。
·Job:作业。
·Mutex:互斥信号量。
·Process:进程。
·Semaphore:计数信号量。
·Thread:线程。
·Waitable timer:定时器。
原型:
DWORD WaitForSingleObject(
HANDLE hHandle, // 对象句柄
DWORD dwMilliseconds // 等待时间
);
参数说明:
hHandle:等待对象的对象句柄。该对象句柄必须为SYNCHRONIZE访问。
dwMilliseconds:等待时间,单位为ms。若该值为0,函数在测试对象的状态后立即返回,若为INFINITE,函数一直等待下去,直到接收到一个信号将其唤醒,如表2-1所示。
返回值:
如果成功返回,其返回值说明是何种事件导致函数返回。
表2-1 函数描述
访问 描述 WAIT ABANDONED 等待的对象是一个互斥(Mutex)对象,该互斥对象没有被拥有它的线程释放,它被设置为不能被唤醒 WAIT OBJECT 0 指定对象被唤醒 WAIT TIMEOUT 超时 用法举例:
Static HANDLE hHandlel = NULL;
DWORD dRes;
dRes = WaitForSingleObject(hHandlel,10); //等待对象的句柄为hHandlel,等待时间为10ms
等待对个对象
WaitForMultiple()bject()在指定时间内等待多个对象,它等待的对象与WaitForSingleObject()相同。
原型:
DWORD WaitForMultipleObjects(
DWORD nCount, //句柄数组中的句柄数
CONST HANDLE * lpHandles, //指向对象句柄数组的指针
BOOL fWaitAll, //等待类型
DWORD dwMilliseconds //等待时间
);
参数说明:
nCount:由指针 * lpHandles指定的句柄数组中的句柄数,最大数是MAXIMUM WAIT OBJECTS。
* lpHandles:指向对象句柄数组的指针。
fWaitAll:等待类型。若为TRUE,当由lpHandles数组指定的所有对象被唤醒时函数返回;若为FALSE,当由lpHandles数组指定的某一个对象被唤醒时函数返回,且由返回值说明是由于哪个对象引起的函数返回。
dwMilliseconds:等待时间,单位为ms。若该值为0,函数测试对象的状态后立即返回;若为INFINITE,函数一直等待下去,直到接收到一个信号将其唤醒。
返回值:、
如果成功返回,其返回值说明是何种事件导致函数返回。
各参数的描述如表2-2所示。
表2-2 各参数描述
访问 描述 WAIT OBJECT 0 to(WAIT
OBJECT 0+nCount-1) 若bWaitAll为TRUE,返回值说明所有被等待的对象均被唤醒;若bWaitAll为FALSE,返回值减去WAIT OBJECT 0说明lpHandles数组下标指定的对象满足等待条件。如果调用时多个对象同时被唤醒,则取多个对象中最小的那个数组下标 WAIT ABANDONED 0 to(WAIT
ABANDONED 0+nCount-1) 若bWaitAll为TRUE,返回值说明所有被等待的对象均被唤醒,并且至少有一个对象是没有约束的互斥对象;若bWaitAll为FALSE,返回值减去WAIT ABANDONED 0说明lpHandles数组下标指定的没有约束的互斥对象满足等待条件 WAIT TI
显示全部