所以我在看我的下一个学校作业,我很困惑。我想我会向专家们寻求一些方向。我对同步方面的知识严重缺乏,而且我对它所指的“m写文件”作业也没有这么热心。糟糕可能是个好词。如果我能得到一些关于如何完成这个问题的指导,我将不胜感激。不是找人来做我的任务,只是需要有人为我指明正确的方向。婴儿步子。
基于您在实验室2中创建的多线程文件复制工具(mcopyfile),现在请使用一个使用固定数量的线程来处理加载的工作池(生产者-消费者模型)实现(不管目录中要复制多少文件)。您的程序应该创建一个文件复制生成器线程和多个文件复制使用者线程(这个数字来自命令行参数)。文件复制生成器线程将在有限制大小的缓冲区结构中生成(源和目标)文件描述符的列表。每次生产者访问缓冲区时,它都会编写一个(源、目标)文件条目(每次访问)。所有文件复制使用者线程将从该缓冲区中读取,执行实际的文件复制任务,并删除相应的文件条目(每个使用者每次将消耗一个条目)。生产者线程和使用者线程都将向标准输出写入一条消息,给出文件名和完成状态(例如,生产者:“将file1放入缓冲区”,消费者:“完成将file1复制到…”)。
发布于 2012-10-25 06:08:32
假设,您知道如何生成线程,让我为您详细说明问题。有以下构成部分:
现在,按照这个问题,为生产者生成一个线程,为消费者生成n个线程。这些线程就是这样做的:
1. For list of files in the source directory:
1. Task <- (Source file path, destination file path)
2. Acquire lock on _Queue_
3. Write _Task_ to queue
4. Release lock on _Queue_
5. Acquire lock on _stdout_
6. Write to _stdout_
7. Release lock on _stdout_
1. While True:
1. If size of queue == 0:
1. Sleep for some time
1. Else:
1. Acquire lock on _Queue_
2. Dequeue a _Task_
3. Release lock on _Queue_
4. Execute copy operation
5. Acquire lock on _stdout_
6. Write to _stdout_
7. Release lock on _stdout_
我希望这能帮到你。
发布于 2012-10-25 06:12:12
在我看来,一旦您知道了用于线程功能的API/库,您的任务就非常简单了。
首先,您将解析命令行参数并创建指定数量的线程,然后从主线程中获取文件夹中的文件列表,并开始将它们放在线程之间共享并与互斥体(或Windows上的关键部分)同步的数组中。每当其中一个使用者线程获取互斥对象时,它就会复制数组中的文件条目,从数组中删除该条目,释放互斥项,以便另一个线程可以开始执行相同的操作,并开始复制它从数组中删除的条目所表示的文件。
我会给您一些代码片段,但您没有说明用于线程功能的API/库。
https://stackoverflow.com/questions/13062275
复制相似问题