- 1
- 0
- 约1.11万字
- 约 12页
- 2026-02-03 发布于北京
- 举报
游戏之乐_1。10_双线程高效
问题提出
从网络上数据,然后到硬盘上。
问题分析
简单的做法是:先一部分,然后写入硬盘,再继续,再
写入硬盘。
缺点:需要先完才能写入硬盘,和写是串行操作。
改进:让两个线程并行进行,设置缓冲区,采用信号量的形式。
线程,只要缓冲区有空余就,完成后写入线
程缓冲区已有数据。
写线程,只要缓冲区有数据就写入,写完后告诉线程缓冲区
有空闲了。
不是一次完,而是把分成很多部分,每次一个部
分到缓存。到硬盘也不是只进行一次,而是每次从缓存区一块
到硬盘中。
解法
基本的思路:
这个问题相当于生产者和消费者模型的问题。
首先定义两个线程,一个是线程,一个是线程。线程
将数据从网络到相应的数据缓冲区中(由BLOCK组成的队列)。
线程从数据缓冲区中相应数据,并将其写入相应的磁盘。
游戏之乐_1.10_双线程高效
问题提出
网络上数据,然后到硬盘上。
问题分析
简单做法是:先一块然后写到硬盘,然后再,再写到硬
盘上。
缺点:需要先完才能写入硬盘,和写是串行操作。
改进:让两个线程并行进行,设置缓冲区,采用信号量的形式。
线程,只要缓冲区有空余就,完成告诉写线程
缓冲区有数据了。
写线程,只要缓冲区有数据就写入,写完后告诉线程缓冲区
有空闲了。
不是一次完,而是把分成很多部分,每次一个部分
到缓存。到硬盘也不是只进行一次,而是每次从缓存区一块
到硬盘中。
解法
基本的思路:
这个问题相当于是生产者和消费者模型的问题
首先定义两个线程,一个是线程,一个是线程,线程
将数据从网络上到相应的数据的缓冲区中(BLOCK组成的队列)。
的线程从数据缓冲区中相应的数据,并将其写到相应的磁盘上去。
多线程同步的方式包括:CriticalSection、Mutex和
Semaphore(信号量)。由于CriticalSection和Mutex会下
载线程和线程同时工作,影响系统效率,因此这里采用
Semaphore。
信号量的含义:
信号量的特性如下:信号量是一个非负整数(表示可以利用的资源数,
这里指的是可用的数据缓冲区中BLOCK的数量),所有通过它的线
程(线程和线程)都会将该整数减一(通过它当然是为了使
用资源),当该整数值为零时,所有试图通过它的线程都将处于等待
状态。在信号量上我们定义两种操作:Unsignal和Signal(释放)。
当一个线程调用Unsignal操作时,它要么通过然后将信号量减一(还
有相应的资源),要么一直等下去(相应的资源已经没有),直到信
号量大于一或超时。Signal实际上是在信号量上执行加操作,相当于
提醒别的新的线程已经可以使用被释放的资源。
代码见代码1和代码2所示:代码1和代码2是差不多的,
只是注释有所不同,有助于理解。
代码1:
多线程同步的方式有:CriticalSection、Mutex和Semaphore(信号
量)。因为CriticalSection和Mutex,将不会使线程和线程同
时进行工作,影响系统的效率,所以这里采用semaphore。
信号量的含义:
信号量的特性如下:信号量是一个非负整数(表示可以利用的资源数,
这里是指的是可用的数据缓冲区中BLOCK的数量),所有通过它的线
程(线程和线程)都会将该整数减一(通过它当然是为了使用
资源),当该整数值为零时,所有试图通过它的线程都将处于等待状态。在
信号量上我们定义两种操作:Unsignal和Signal(释放)。当一个线
程调用Unsignal操作时,它要么通过然后将信号量减一(还有相应的资
源),要么一直等下去(相应的资源已经没有),直到信号量大于一或超
您可能关注的文档
最近下载
- 2025年广东省东莞市中考一模英语试卷.docx VIP
- (2026年)无导线起搏器安置术患者的围术期护理PPT课件.pptx VIP
- 直播电商对消费者购买行为的影响因素研究.docx VIP
- 医药招商年终总结报告.pptx VIP
- 电商直播中消费者冲动性购买行为影响因素研究.pdf VIP
- 2025至2030中国医用X-光胶片行业市场发展现状研究及投资战略咨询报告.docx
- 4篇范文:2026年带头强化政治忠诚、提高政治能力、敬畏人民、敬畏组织、敬畏法纪等“五个带头”方面对照检查发言材料.docx VIP
- AquaKool_AquaKool Mini直流变频风冷冷水(热泵)机组技术手册-CGHR-PRC0.pdf VIP
- 失眠症诊断和治疗指南(2025版)解读PPT课件.pptx VIP
- 2025至2030中国医药自动点胶柜行业市场发展现状研究及投资战略咨询报告.docx
原创力文档

文档评论(0)