- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2012-2013学年第一学期
实验一 Windows多线程
【开发语言及实现平台或实验环境】
C++/C#
Microsoft Visual Studio 6.0/ Microsoft Visual Studio .NET
【实验目的】
(1) 进一步理解操作系统的并发性;
(2) 了解Windows线程创建方法,并通过查阅资料理解各参数的含义;
(3) 了解多线程程序设计方法,并进行简单应用。
【实验要求】
(1) 逐程序进行简要分析、运行各程序并仔细阅读注释;
(2) 查阅MSDN或其他资料,掌握相关系统调用使用方法和参数含义;
(3) 完成实验报告。
【实验结果与分析】
Sleep是阻塞线程函数。它会在当前语句阻塞一段时间,参数是以1/1000秒为单位的Sleep(10) ? 使当前线程放弃目前的时间片,并且在 ? 10ms ? 内不会被再次调度。thread1 is sell tickets:时间片就停了,tickets没--,还可以运行thread2 is sell tickets:tickets—也就是说tickets变为0,返回再运行thread1 is sell tickets时就卖0号票了
【实验思考及总结】
………………………
加入循环,使得俩个进程交替执行
Sleep是阻塞线程函数。它会在当前语句阻塞一段时间,参数是以1/1000秒为单位的实验二 Windows线程同步机制
【开发语言及实现平台或实验环境】
C++/C#
Microsoft Visual Studio 6.0/ Microsoft Visual Studio .NET
【实验目的】
(1) 了解Windows线程同步机制;
(2) 了解互斥体,并通过查阅资料理解互斥体对象的使用方法;
(3) 了解事件,并通过查阅资料理解事件对象的使用方法;
(4) 了解关键区,并通过查阅资料理解关键区对象的使用方法;
(5) 了解信号量,并通过查阅资料理解信号量对象的使用方法
【实验要求】
(1) 逐程序进行简要分析、运行各程序并仔细阅读注释;
(2) 查阅MSDN或其他资料,掌握相关系统调用使用方法和参数含义;
(3) 完成实验报告。
【实验结果与分析】
thread1 is sell tickets:时间片就停了,tickets没--,还可以运行thread2 is sell tickets:tickets—也就是说tickets变为0,返回再运行thread1 is sell tickets时就卖0号票了
【实验思考及总结】
Sleep(10) ? 使当前线程放弃目前的时间片,并且在 ? 10ms ? 内不会被再次调度线程之间的同步使用一些核心对象:如thread,? process, evnet, mutex, semaphore. 在线程之间使用等待函数如WaitForSingleObjects,? WaitForMultipleObjects. 等待函数使用核心对象的handle作为参数,如果handle被激发,则执行下一步。 handle被激发的条件: (handle是一段内存指针,为了掩藏内部实现而作的一个类型转化指针)激发:---我的理解是资源未被战胜。未激发: ---资源正在被占用。 eg: 1)thread, process被终止,则激发。 2)event: 要通过它的API来手动激发,是最灵活的激发方式,可被所有线程使用。 3)mutex: 没被任何线程所拥有,则激发。
1)临界区: CRITICAL_SECTION 适用范围: 单一进程的各线程之间用来排它性占有特性: 局部性对象; 快速而有效. 无法监测是否被线程放弃函数: EnterCriticalSection LeaveCriticalSection
2)Mutex: 适用范围: 不同线程之间用来排它性占有特性: 核心对象, 可以使用wait进行等待,只能被拥有线程所释放函数:CreateMutex ReleaseMutex
3)semaphore: 信号量 适用范围: 用来限制资源占用特性: 核心对象,没有拥有者,任何线程都可释放函数:CreateSemaphore OpenSemaphore ReleaseSemaphore
4)Event: 适用范围: 同来控制对象信号的接收,常与信号系统结合起来特性: 核心对象函数: CreateEvent OpenEvent PulseEvent SetEvent ResetEvent ? 5)Interlocked 简单的原子操作,如写文件中对文件中字节范围的锁定_locking
NOTE: 线程同步中很重要的可归纳为锁系统lock和信号系统signal lock包括:CRITICAL_SECTION, Mute
文档评论(0)