windows线程同步与互斥

windows线程同步与互斥

ID:21926026

大小:136.00 KB

页数:10页

时间:2018-10-25

windows线程同步与互斥_第1页
windows线程同步与互斥_第2页
windows线程同步与互斥_第3页
windows线程同步与互斥_第4页
windows线程同步与互斥_第5页
资源描述:

《windows线程同步与互斥》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验4Windows线程同步和互斥实验目的1、了解Windows内核对线程同步的支持。2、了解C的线程函数库及Windows基本的线程API函数的使用。3、进一步理解线程的同步控制原理。预备知识一、Windows线程同步机制(注:互斥是同步的一种特例)n事件(Event)n临界区(CriticalSection)n互斥量(Mutex)n信号量(Semaphore)1、是否能跨进城使用?互斥量、信号量、事件都可以跨进程来实现同步数据操作。临界区只能用在同一进城的线程间互斥,因为临界区无名(无句柄)。如果只为了在进程内部用的话,使用临界区会带来速度上的优势并能够减少资源占用量。2、

2、其它区别临界区:访问临界资源的代码段。课堂上讲过。(存钱、取钱的例子还记得吗?)互斥量:资源独占使用信号量:资源计数器事件对象:可以通过“通知”的方式来保持线程的同步。事件是WIN32中最灵活的线程间同步机制。事件存在两种状态:激发状态(SignaledorTrue)未激发状态(UnsignaledorFalse)。3、详细解释:(见下面实验内容每个程序前)二、VC++(略)要用到的系统调用1、 2、实验内容1、用事件(Event)对象来进行线程同步n事件可分为两类:n手动设置:这种对象只可能用程序手动设置,在需要该事件或者事件发生时,采用SetEvent及ResetEvent

3、来进行设置。n自动恢复:一旦事件发生并被处理后,自动恢复到没有事件状态,不需要再次设置。n_beginthread函数:创建一个线程。所在库文件:#include  uintptr_t_beginthread(  void(*start_address)(void*),  unsignedstack_size,  void*arglist  );  返回值:  假如成功,函数将返回一个处理信息对这个新创建的线程。如果失败_beginthread将返回-1。  start_address  新线程的起始地址,指向新线程调用的函数的起始地址stack_size

4、stack_size新线程的堆栈大小,可以为0arglistarglist传递给线程的参数列表,无参数是为NULL  nCreateEvent函数:创建事件对象windows.hHANDLECreateEvent( //SECURITY_ATTRIBUTES结构指针,可为NULLLPSECURITY_ATTRIBUTESlpEventAttributes, BOOLbManualReset, //手动/自动 //TRUE:在WaitForSingleObject后必须手动调用ResetEvent清除信号 //FALSE:在WaitForSingleObject后,系统自动清除事

5、件信号 BOOLbInitialState,//初始状态 LPCTSTRlpName//事件的名称);n使用“事件”机制应注意以下事项:n如果跨进程访问事件,必须对事件命名,在对事件命名的时候,要注意不要与系统命名空间中的其它全局命名对象冲突;n事件是否要自动恢复;n事件的初始状态设置。n由于event对象属于内核对象,故进程B可以调用OpenEvent函数通过对象的名字获得进程A中event对象的句柄,然后将这个句柄用于ResetEvent、SetEvent和WaitForMultipleObjects等函数中。此法可以实现一个进程的线程控制另一进程中线程的运行,例如:HAN

6、DLEhEvent=OpenEvent(EVENT_ALL_ACCESS,true,"MyEvent");ResetEvent(hEvent);验证程序:3个线程。主线程创建2个线程。一读,一写。写线程(并不真写,只是输出writing等字符串)完成后,读线程才能读,读线程完成后,主线程才能结束。新建一个Win32控制台应用程序项目(win32consoleapplication)#include"stdafx.h"#include#include#include#includeHANDL

7、EevRead,evFinish;//全局变量,事件对象的句柄voidReadThread(LPVOIDparam){WaitForSingleObject(evRead,INFINITE);//等待evRead被激活cout<<"Reading...读完成,唤醒主线程"<

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。