2017-06-04 70 views
-2

我有一些線程在數組上工作,並且每個線程都將它們的部分與其他線程並行排序。我有一個全局的pthread_t數組,其中我排序每個線程的ID。下面是我無法弄清楚的部分:線程完成排序後,我希望它打印某些東西,但順序必須從線程[MAX]到線程[0]。我該怎麼做呢?我嘗試瞭解如何使用pthread_cond_wait()和pthread_cond_signal(),但我甚至不確定這是否是我需要完成的工作。在pthreads中選擇打印順序

基本上我想要的是,我的線程並行工作,直到他們到達特定點,我希望他們按特定順序繼續。

+0

所有線程完成後打印數據?它不能並行完成。 –

+0

@WeatherVane首先,我不想按照特定的順序並行打印,其次,我不想在打印完**後打印**,但打印位於每個線程的最後一行。 – Gspoon

+0

爲什麼打印必須是每個線程的最後一行? –

回答

1

這是可能的。我明白這種uni任務的理由是什麼。不錯的一個,我感謝它,以一些邪惡的方式。這個算法很簡單,但是如果你在解決現實生活中遇到類似的問題,那麼你就會被淹沒。簡單地說:所有線程在完成主要工作(排序)之後都必須等待屏障。當他們全部到達障礙時,他們等待一個獨立的實體,你需要觸發第一個,然後是第二個,然後是另一個。

所以,你需要找到如何實現屏障,除非最後一個線程到達它,否則每個線程都會等待。

並提示觸發:您需要立即觸發所有這些觸發。但是隻有設計好的人才能真正處理,而其他人則會回到等待實體。 (編輯:它可以以更好的方式完成,但你自己猜)。

做你的工作,做你的研究,給我們看一些代碼,然後你會得到一些更詳細的幫助。

順便說一下,在堆棧溢出的過去24小時裏,有一些關於條件變量的問題。去,找他們。你可以在你的任務中找到一些解釋和一些想法。