选择 pthread 中的打印顺序

标签 c multithreading pthreads

我有一些线程在处理一个数组,每个线程都与其他线程并行地对自己的部分进行排序。我有一个 pthread_t 的全局数组,在其中对每个线程的 id 进行排序。这是我无法弄清楚的部分:线程完成排序后,我希望它打印一些内容,但顺序必须是从线程[MAX]到线程[0]。我该怎么做呢?我试图了解如何使用 pthread_cond_wait() 和 pthread_cond_signal() 但我什至不确定这是否是我完成工作所需的。

本质上,我想要的是,我的线程并行工作,直到它们到达特定点,我希望它们按照特定顺序继续。

最佳答案

这是可能的。我明白这样的大学任务背后的原因是什么。不错,我很欣赏,但以某种邪恶的方式。该算法很简单,但是如果您将类似的东西放入现实生活问题的解决方案中,您就会受到限制。简而言之:所有线程在完成其主要工作(排序)后必须等待屏障。当它们全部到达障碍物时,它们会等待一个单独的实体,您需要触发第一个实体,然后触发第二个实体,然后触发另一个实体。

因此,您需要找到如何实现屏障,每个线程都会等待,除非最后一个线程到达它。

还有触发提示:您需要立即触发所有这些。但只有设计好的一个才能真正进行处理,而其他人则会回去等待该实体。 (编辑:可以用更好的方式完成,但你自己猜一下)。

做好你的工作,做你的研究,向我们展示一些代码,然后你将获得一些更详细的帮助。

顺便说一句,过去 24 小时内堆栈溢出出现了一些有关条件变量的问题。去找他们吧。您可以找到一些解释和一些可以在您的任务中使用的想法。

关于选择 pthread 中的打印顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44358472/

相关文章:

c - 查找素数给我带来错误

c - 当我尝试以相反顺序打印字符串时,为什么我的 C 程序会打印新的空白行?

c - O_CLOEXEC 和 TIOCEXCL 之间的区别

c# - ASP.NET MVC 输出缓存 "thread safe"

android 可以 SQLiteDatabase 的单个实例管理多个线程之间的同步吗?

c - 如何使用 pthreads 访问本地存储

c - 将结构作为参数传递给 pthread

c - 如何分析排序算法?

c - 线程要处理

c++ - scoped_lock() - 使用 pthread 的 RAII 实现