首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件复制工具w/生产者/消费者模型

文件复制工具w/生产者/消费者模型
EN

Stack Overflow用户
提问于 2012-10-25 05:41:35
回答 2查看 1K关注 0票数 0

所以我在看我的下一个学校作业,我很困惑。我想我会向专家们寻求一些方向。我对同步方面的知识严重缺乏,而且我对它所指的“m写文件”作业也没有这么热心。糟糕可能是个好词。如果我能得到一些关于如何完成这个问题的指导,我将不胜感激。不是找人来做我的任务,只是需要有人为我指明正确的方向。婴儿步子。

基于您在实验室2中创建的多线程文件复制工具(mcopyfile),现在请使用一个使用固定数量的线程来处理加载的工作池(生产者-消费者模型)实现(不管目录中要复制多少文件)。您的程序应该创建一个文件复制生成器线程和多个文件复制使用者线程(这个数字来自命令行参数)。文件复制生成器线程将在有限制大小的缓冲区结构中生成(源和目标)文件描述符的列表。每次生产者访问缓冲区时,它都会编写一个(源、目标)文件条目(每次访问)。所有文件复制使用者线程将从该缓冲区中读取,执行实际的文件复制任务,并删除相应的文件条目(每个使用者每次将消耗一个条目)。生产者线程和使用者线程都将向标准输出写入一条消息,给出文件名和完成状态(例如,生产者:“将file1放入缓冲区”,消费者:“完成将file1复制到…”)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-25 06:08:32

假设,您知道如何生成线程,让我为您详细说明问题。有以下构成部分:

  1. 生产者.它根据源目录输入参数为使用者生成任务。
  2. 任务。任务是使用者执行其复制任务的信息。即源文件描述符和目标文件描述符的元组。
  3. 队列。它是生产者和消费者之间交流的中心部分。生产者将任务写入队列,而使用者则使用任务。
  4. Consumer.您有一个以Task作为输入并执行复制操作的实际工作人员池。

现在,按照这个问题,为生产者生成一个线程,为消费者生成n个线程。这些线程就是这样做的:

  • 生成器线程

代码语言:javascript
复制
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_

  • 消费线程

代码语言:javascript
复制
1. While True: 
    1. If size of queue == 0: 
        1. Sleep for some time

代码语言:javascript
复制
    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_

我希望这能帮到你。

票数 1
EN

Stack Overflow用户

发布于 2012-10-25 06:12:12

在我看来,一旦您知道了用于线程功能的API/库,您的任务就非常简单了。

首先,您将解析命令行参数并创建指定数量的线程,然后从主线程中获取文件夹中的文件列表,并开始将它们放在线程之间共享并与互斥体(或Windows上的关键部分)同步的数组中。每当其中一个使用者线程获取互斥对象时,它就会复制数组中的文件条目,从数组中删除该条目,释放互斥项,以便另一个线程可以开始执行相同的操作,并开始复制它从数组中删除的条目所表示的文件。

我会给您一些代码片段,但您没有说明用于线程功能的API/库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13062275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档