gpt4 book ai didi

c++ - 带生产者/消费者模型的文件复制工具

转载 作者:行者123 更新时间:2023-11-28 07:54:26 25 4
gpt4 key购买 nike

所以我在查看我的下一份学校作业时,我感到很困惑。我想我会向专家寻求指导。我对同步的知识严重缺乏,而且我对它所指的“mcopyfile”分配也没有那么热。可怕可能是一个好词。如果我能得到一些关于如何解决这个问题的指导,我将不胜感激。不找人做我的任务,只需要有人给我指明正确的方向。婴儿步骤。

Based on the multi-threaded file copy tool (mcopyfile) you have created in Lab 2, now please use a worker pool (Producer-Consumer model) implementation that uses a fixed number of threads to handle the load (regardless how many files in the directory to copy). Your program should create 1 file copy producer thread and multiple file copy consumer threads (this number is taken from the command-line argument). The file copy producer thread will generate a list of (source and destination) file descriptors in a buffer structure with bounded size. Each time when the producer accesses the buffer it will write one (source, destination) file entry (per visit). And all file copy consumer threads will read from this buffer, execute the actual file copy task, and remove the corresponding file entry (each consumer will consume one entry each time). Both producer and consumer threads will write a message to standard output giving the file name and the completion status (e.g., for producer: “Completing putting file1 in the buffer”, for consumer: “Completing copying file1 to …”).

最佳答案

假设您知道如何生成线程,让我为您分解一下这个问题。有以下组件:

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

现在根据问题,为生产者生成一个线程,为消费者生成 n 个线程。这就是线程所做的:

  • 生产者线程

    1. 对于源目录中的文件列表:
      1. 任务<-(源文件路径,目标文件路径)
      2. 获取队列的锁
      3. 任务写入队列
      4. 释放对队列的锁定
      5. 获取stdout的锁
      6. 写入stdout
      7. 释放对stdout的锁定
  • 消费者线程

    1. 虽然正确:
      1. 如果队列大小 == 0:
        1. 睡一会儿
      2. 其他:
        1. 获取队列的锁
        2. 出列一个任务
        3. 释放对队列的锁定
        4. 执行复制操作
        5. 获取stdout的锁
        6. 写入stdout
        7. 释放对stdout的锁定

希望对您有所帮助。

关于c++ - 带生产者/消费者模型的文件复制工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13062275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com