舉例用2個執行緒實現乙個簡單的陣列排序,演示執行緒的基本用法用分而治之的思想
// multithreadedarraysort.cpp : 此檔案包含 "main" 函式。程式執行將在此處開始並結束。
//#include "pch.h"
#include #include #include using namespace std;
#define threads_number 2
#define elements_number 200
#define block_size elements_number / threads_number
#define max_value 1000
typedef struct _tagarrayobject
arrayobject, *parrayobject;
dword winapi threadstart(lpvoid lpparameter);
void printarray(int* iarray, int isize);
void mergearrays(int* leftarray, int leftarraylenght, int*
rightarray, int rightarraylength, int* mergedarray);
int _tmain(int argc, tchar* ar**)
handle hthreads[threads_number];
arrayobject pobject1 = ; //傳遞給執行緒例程的指標
hthreads[0] = createthread(null, 0, (lpthread_start_routine)
threadstart, (lpvoid)&pobject1, 0, null);
arrayobject pobject2 = ;
hthreads[1] = createthread(null, 0, (lpthread_start_routine)
threadstart, (lpvoid)&pobject2, 0, null);
cout << "waiting execution..." << endl;
waitformultipleobjects(threads_number, hthreads, true, infinite);
mergearrays(&iarray1[0], block_size, &iarray2[0], block_size, &iarray[0]);
printarray(iarray, elements_number);
closehandle(hthreads[0]);
closehandle(hthreads[1]);
cout << "array sorted..." << endl;
return 0;
}//開始執行執行緒的地方
dword winapi threadstart(lpvoid lpparameter)
} }return 0;
}void printarray(int* iarray, int isize)
cout << endl;
}void mergearrays(int* leftarray, int leftarraylength, int*
rightarray, int rightarraylength, int* mergedarray)
else
k++;
} if (i >= leftarraylength) }
if (j >= rightarraylength) }
}
C 多執行緒程式設計
一 thread 基礎 程序 當乙個程式開始執行時,它就是乙個程序,程序包括執行中的程式和程式所使用到的記憶體和系統資源。而乙個程序又是由多個執行緒所組成的。執行緒 執行緒是程式中的乙個執行流,每個執行緒都有自己的專有暫存器 棧指標 程式計數器等 但 區是共享的,即不同的執行緒可以執行同樣的函式 方...
C 多執行緒程式設計
乙個程序通常定義為程式的乙個例項。在win32中,程序佔據4gb的位址空間。與它們在ms dos和16位windows作業系統中不同,win32程序是沒有活力的。這就是說,乙個win32程序並不執行什麼指令,它只是佔據著4gb的位址空間,此空間中有應用程式exe檔案的 和資料。exe需要的任意dll...
C 多執行緒程式設計
建立執行緒的函式 handle createthread lpsecurity attributes lpthreadattributes,使用預設安全形態,設為null,表明不可被子執行緒繼承 size t dwstacksize,初始棧大小,預設值0表示使用與呼叫該函式的執行緒相同的棧大小 lp...