多執行緒快速排序(思考)

2022-03-18 23:09:01 字數 999 閱讀 4946

在csdn看到的一位牛人實現的多執行緒快排,暫時沒細看,但是感覺有點小問題,他的多執行緒快排並沒有實現我所想要的那種平行計算的結果,我理想中的多執行緒排序

(這裡特指快排)應該是類似於mapreduce的分拆和合併,在快排中,分拆是必然(和歸併一樣,基因決定嘛),分拆後的陣列可以形成佇列,按照核心數分給每個執行緒

進行排序,然後進行歸併。打算找個時間自己實現一下。

#include #include #include #include #define num 10000*1000 //設定陣列中的資料量,設定為1000萬

handle hmutex;

int count=0; //記錄建立執行緒的總數量

struct threadsortdata //定義為多執行緒函式傳遞的引數

;dword winapi threadquicksort(lpvoid lpparam) //多執行緒快速排序

num[i]=num[j];

while(i1) //如果本段陣列關鍵字的左端至少有兩個資料,那麼繼續排序

if((end-j)>1) //如果本段陣列關鍵字的右端至少有兩個資料,那麼繼續排序

waitforsingleobject(hthread1,infinite); //子執行緒執行完畢後主執行緒再繼續執行

waitforsingleobject(hthread2,infinite); //子執行緒執行完畢後主執行緒再繼續執行

closehandle(hthread1);

closehandle(hthread2);

delete lpparam; //釋放動態記憶體

return true;

}void main()

printf("\n");*/

printf("一共建立了%d個執行緒\n",count); //輸出匯流排程數

printf("一共花費了%d毫秒\n",time); //輸出匯流排程數

delete num;

}

多執行緒的思考

1.為什麼要使用多執行緒?a.更好的利用cpu的資源.b.伺服器端我想不到其他原因.2.問題的由來?a.搶占式 b.共享記憶體 cpu對程序的排程是搶占式的 這裡先假設系統中所有的程序都是單執行緒模式的 沒有使用任何同步措施,沒問題,為什麼,因為沒有共享記憶體.lua等動態語言中多個執行流共享記憶體...

多執行緒 多協程快速排序

package main import fmt sync time 分割演算法1 func partition1 arr int low,high int int arr low arr high 將小的往前覆蓋,第乙個覆蓋的是樞紐資料 for low high arr low t arr high...

多執行緒程式設計的思考

bestboyxie 勵志做一名能幫助到他人的程式設計師,如果你覺得這篇文章對你有幫助,麻煩你點讚 其實學習多執行緒程式設計已經是很多年前的事情了真正用到多執行緒的應用場景並不多,總體上說來我覺得多執行緒有一下幾個方面的思考 1。為什麼要用多執行緒。其實很多時候,學習多執行緒程式設計的時候,總是寫了...