C 執行緒模擬的實現《C 多執行緒程式設計實戰》

2021-09-10 22:48:41 字數 1866 閱讀 4861

舉例用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...