2017-06-04 67 views
-2

我有一些线程在数组上工作,并且每个线程都将它们的部分与其他线程并行排序。我有一个全局的pthread_t数组,其中我排序每个线程的ID。下面是我无法弄清楚的部分:线程完成排序后,我希望它打印某些东西,但顺序必须从线程[MAX]到线程[0]。我该怎么做呢?我尝试了解如何使用pthread_cond_wait()和pthread_cond_signal(),但我甚至不确定这是否是我需要完成的工作。在pthreads中选择打印顺序

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

+0

所有线程完成后打印数据?它不能并行完成。 –

+0

@WeatherVane首先,我不想按照特定的顺序并行打印,其次,我不想在打印完**后打印**,但打印位于每个线程的最后一行。 – Gspoon

+0

为什么打印必须是每个线程的最后一行? –

回答

1

这是可能的。我明白这种uni任务的理由是什么。不错的一个,我感谢它,以一些邪恶的方式。这个算法很简单,但是如果你在解决现实生活中遇到类似的问题,那么你就会被淹没。简单地说:所有线程在完成主要工作(排序)之后都必须等待屏障。当他们全部到达障碍时,他们等待一个独立的实体,你需要触发第一个,然后是第二个,然后是另一个。

所以,你需要找到如何实现屏障,除非最后一个线程到达它,否则每个线程都会等待。

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

做你的工作,做你的研究,给我们看一些代码,然后你会得到一些更详细的帮助。

顺便说一下,在堆栈溢出的过去24小时里,有一些关于条件变量的问题。去,找他们。你可以在你的任务中找到一些解释和一些想法。