C++ 使用线程打印数组中的唯一元素

C++ 使用线程打印数组中的唯一元素,c++,multithreading,pthreads,C++,Multithreading,Pthreads,我有一个由M个数字组成的整数数组,我想产生N个线程,这些线程将从中读取至少一个元素并打印出来。 条件是 1.每个线程都应该打印唯一的元素 2.每个线程应至少打印一个元素。 我只需要一个如何实现的想法 提前感谢警告:这与其说是对问题的直接回答,不如说是一个评论(太长了,无法放在评论空间中) 您所要求的基本问题是,几乎所有您想要做的事情都(很大程度上)依赖于所有数据之间的交互,以及(如果您确实坚持使用线程)所有线程之间的交互 第一个要求是每个线程从组中选择一个唯一的项。选择唯一项意味着所有线程都至少

我有一个由M个数字组成的整数数组,我想产生N个线程,这些线程将从中读取至少一个元素并打印出来。 条件是 1.每个线程都应该打印唯一的元素 2.每个线程应至少打印一个元素。 我只需要一个如何实现的想法


提前感谢

警告:这与其说是对问题的直接回答,不如说是一个评论(太长了,无法放在评论空间中)

您所要求的基本问题是,几乎所有您想要做的事情都(很大程度上)依赖于所有数据之间的交互,以及(如果您确实坚持使用线程)所有线程之间的交互

第一个要求是每个线程从组中选择一个唯一的项。选择唯一项意味着所有线程都至少知道其他线程将选择哪些数据

如果你愿意在一个线程中完成几乎所有的工作,你可以让它变得简单。显而易见的方法是对数据进行排序并删除所有重复项。然后让每个线程选择一个唯一的元素是很简单的:给每个线程一个要选择的元素的索引,就完成了

不幸的是,这也意味着线程基本上没有做任何工作

下一步也是一样糟糕(可能更糟)。每个线程都需要打印出它的数据。至少假设有一个正常的类似流的输出机制,比如
std::cout
,为了避免结果成为混乱的混乱,您需要使用互斥体之类的东西来确保一次只有一个线程打印某个内容,然后当它完成时,另一个线程打印它的输出,依此类推。简言之,它必须完全连续进行,以保持输出有意义

长话短说,所有真正的工作最终都是由一个线程在开始时生成排序的唯一数据,并在结束时连续写出结果。中间可以并行执行的任务非常琐碎,几乎毫无意义

线程的理想情况在本质上与此相反。您希望能够非常快速地分割数据,然后在几乎所有实际工作中使用大量线程,而无需与其他线程同步

现在,如果你愿意把一些工作放在一个死胡同的任务中,那么至少可以用你概述的任务来完成其中的一部分。例如,假设您关心的数据是数字。您可以从一个线程开始,该线程只将这些数字划分为多个范围(例如,只查看最重要的数字)。然后,您可以为每个范围设置一个线程,进一步细分这些数字(例如,基于下一个数字)。当您将数据划分为您想要的唯一数字范围时,每个线程只需从其范围中选择一个数字并打印出来


对于较小的数字,使用线程执行此任务可能仍然是一个净损失,但如果您有足够的输入(尤其是)足够大的输入,并且您通过只查看几个数字而不是比较完整的数字来真正获得一些东西,这可能是一个胜利。

这是一个家庭作业,您除了这样做之外别无选择吗?否则,就使用线程而言,这几乎是最糟糕的情况。这就相当于说:“我想环游世界。但我不想坐船,我要在筛子里做。”实际上,我想要一个使用线程的选择算法。