2015-04-21 35 views
-1

矢量的子部分我有所述類型的無符號變量的矢量:排序在C++

vector<unsigned> a; 
a.push_back(5); a.push_back(3); a.push_back(2); a.push_back(1); 
a.push_back(12); a.push_back(4); a.push_back(20); a.push_back(11); 
a.push_back(13); a.push_back(7); a.push_back(23); a.push_back(21); 

現在我想創建3個線程,使得每個線程排序的矢量4個值。例如。

Thread 1: a[0],a[1],a[2],a[3]. After sorting their values become: 1,2,3,5 
Thread 2: a[4],a[5],a[6],a[7]. After sorting their values become: 4,11,12,20 
Thread 3: a[8],a[9],a[10],a[11]. After sorting their values become: 7,13,21,23 

在所有的線程完成排序後,我打算通知現在這些值已排序。如果是的話,是否可以在C++中使用pthread來做同樣的事情,然後如何實現。我正在使用gcc 4.4。我知道可以按順序做同樣的事情,但我很想知道是否可以用多線程方式對這些線程進行排序?

編輯:我不能使用std ::異步,因爲我用gcc版本4.4的工作。我試圖將這個邏輯包含在一個已經在C++ 11之前編碼的舊代碼中。因此,我不能使用C++ 11。

+0

提供給線程的地區是重疊的,是故意的嗎? – Arun

+0

你在問一個XY問題。見http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem當你找出你真的想問什麼問題時,一定要編輯你的問題並更新它。 –

+0

@Arun感謝您的評論。提供給線的區域將不重疊,例如a [0],a [1],a [2],a [3]屬於第一個線程,它們的排序順序爲1,2,3,5。同樣,[4],a [5],a [6],a [7]屬於第二個線程,它們的排序順序爲4,11,12,20。因此,這些區域不重疊 –

回答

1

排序算法,std::sort,在迭代器工作。這需要兩個迭代器,說beginend,並在半開區間[begin, end)元素進行排序。

因此,我們可以嘗試一下本作的問題分解。現在

thread 0: sort(a, a+4); 
thread 1: sort(a+4, a+8); 
thread 2: sort(a+8, a+12); 

,關於工作分配給線程,並等待它們的完成,我們可以嘗試std::async。如果C++ 11不是一個選項(如在評論中提及),那麼你可以創建一個線程池解決方案,例如參見How to create a thread pool using boost in C++?

+0

謝謝,我不能異步,因爲我有gcc版本4.4使用。你可以請建議一些解決方案,可以使用小於c + + 11的版本。因爲我不能使用C++ 11。 –

+0

好的。謝謝,但我無法理解他們如何通知所有線程已完成操作。代碼也給我錯誤:'threadpool'沒有命名一個類型 –