所以我一直在寻找在我的下一个作业,我很困惑。 我想我会来的专家对一些方向。 我上同步知识严重缺乏,而我没有这样做热上它是指“mcopyfile”分配。 可怕的可能会是一个好词。 如果我能得到有关如何完成这个问题的一些方向,这将是大加赞赏。 不找人做我的任务,只是需要有人点我在正确的方向。 婴儿的步骤。
基于你在实验2中创建的多线程文件复制工具(mcopyfile),现在请用工作池(生产者 - 消费者模式)使用线程固定数量的处理负载执行(不管有多少个文件在目录拷贝)。 你的程序应该创建一个文件拷贝生产线和多文件拷贝消费者线程(这个数字是通过命令行参数获取)。 文件复制生产者线程将产生具有有界尺寸的缓冲器结构的文件描述符列表(源和目的地)。 每一个当制片人访问它会写一个(源,目的地)文件条目(每次访问)的缓冲时间。 而且所有文件拷贝消费者线程将从该缓冲区读取,执行实际文件拷贝任务,并删除相应文件条目(每个消费者每次都会消耗一个条目)。 双方生产者和消费者的线程会写一条消息到标准输出给文件名和完成情况(例如,对于制片人:“完成把文件1在缓冲区”,为消费者:“完成复制文件1到......”)。
假设,你知道如何生成线程,让我打破为您解决问题。 有以下组件:
- 制片人 。 它基于源目录输入参数为消费者 任务 。
- 任务 。 任务是信息消费者来执行它的复制任务。 即源文件描述符和目的地文件描述符的元组。
- 队列 。 它是生产者和消费者之间进行通信的中心件。 生产者将任务写入队列和消费者消费它。
- 消费者 。 您有需要的任务 ,因为输入并执行复制操作的实际工作者池。
现在按的问题,催生一个生产者和n个线程,为消费者一个线程。 这是什么的线程做:
生产者线程
- 对于源目录中的文件列表:
- 任务< - (源文件路径,目标文件路径)
- 获得关于排队锁
- 写入任务排队
- 在队列释放锁
- 获得在标准输出上的锁
- 写入stdout
- 在标准输出上释放锁
消费者线程
- 虽然真:
- 如果队列== 0的大小:
- 睡了一段时间
- 其他:
- 获得关于排队锁
- 出队任务
- 在队列释放锁
- 执行复制操作
- 获得在标准输出上的锁
- 写入stdout
- 在标准输出上释放锁
我希望这有帮助。
你的任务看起来很简单的给我,一旦你知道什么API /库您使用的线程功能。
首先,你解析命令行参数和创建线程的指定号码,然后从主线程获取的文件夹中的文件列表,并开始把它们放入数组(像一个std ::向量)是共享在线程之间,并与一个互斥(或Windows上的关键部分)同步。 每当消费者一个线程获取该互斥锁,它使阵列中的文件条目的副本,删除该数组该条目,释放互斥体,另一个线程可以开始做同样的,并开始复制所代表的文件条目它从阵列中移除。
我想给你一些代码片段,但你没有说你正在使用的API /库的线程功能。