Windows多线程开发之并发线程程序研究
发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,做为一名分布式服务器开发人员,在服务器开发领域、多线程开发和并发编程方面有自己的心得和经验,愿意分享给同仁,今讨论下Windows下线程并发程序开发。下面用用两个线程实现一个简单的数组排序,演示了线程
千家信息网最后更新 2024年11月22日Windows多线程开发之并发线程程序研究
做为一名分布式服务器开发人员,在服务器开发领域、多线程开发和并发编程方面有自己的心得和经验,愿意分享给同仁,今讨论下Windows下线程并发程序开发。
下面用用两个线程实现一个简单的数组排序,演示了线程的基本用法。
原理是:
为了节省执行时间而添加并行,把问题划分为几个小问题,并分配给几个线程(分而治之),把问题划分成若干更小的单元,更容易在实现中创建并行逻辑。同时,在并行中使用系统资源能优化应用程序并提高其运行速度。
#include "stdafx.h" #include#include #include #include #include using namespace std;#define THREADS_NUMBER 2#define ELEMENTS_NUMBER 200#define BLOCK_SIZE ELEMENTS_NUMBER / THREADS_NUMBER #define MAX_VALUE 1000typedef struct _tagARRAYOBJECT { int* iArray; int iSize; int iThreadID; } ARRAYOBJECT, *PARRAYOBJECT;DWORD WINAPI ThreadStart( LPVOID lpParameter);void PrintArray( int* iArray, int iSize);void MergeArrays(int* leftArray, int leftArrayLenght, int* rightArray, int rightArrayLenght, int* mergedArray);int _tmain(int argc, _TCHAR* argv[]){ int iArray1[BLOCK_SIZE]; int iArray2[BLOCK_SIZE]; int iArray[ELEMENTS_NUMBER]; for (int iIndex = 0; iIndex < BLOCK_SIZE; iIndex++) { iArray1[iIndex] = rand() % MAX_VALUE; iArray2[iIndex] = rand() % MAX_VALUE; } HANDLE hThreads[THREADS_NUMBER]; ARRAYOBJECT pObject1 = { &(iArray1[0]), BLOCK_SIZE, 0 }; hThreads[0] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadStart,(LPVOID)& pObject1, 0, NULL); ARRAYOBJECT pObject2 = { &(iArray2[0]), BLOCK_SIZE, 1 }; 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; getchar(); return 0;} DWORD WINAPI ThreadStart(LPVOID lpParameter){ PARRAYOBJECT pObject = (PARRAYOBJECT)lpParameter; int iTmp = 0; for (int iIndex = 0; iIndex < pObject->iSize; iIndex++) { for (int iEndIndex = pObject->iSize - 1; iEndIndex > iIndex; iEndIndex--) { if (pObject->iArray[iEndIndex] < pObject->iArray[iIndex]) { iTmp = pObject->iArray[iEndIndex]; pObject->iArray[iEndIndex] = pObject->iArray[iIndex]; pObject->iArray[iIndex] = iTmp; } } } return 0;} void PrintArray(int* iArray, int iSize) { for (int iIndex = 0; iIndex < iSize; iIndex++) { cout << " " << iArray[iIndex]; } cout << endl; }void MergeArrays(int* leftArray, int leftArrayLenght, int* rightArray, int rightArrayLenght, int* mergedArray){ int i = 0; int j = 0; int k = 0; while (i < leftArrayLenght && j < rightArrayLenght) { if (leftArray[i] < rightArray[j]) { mergedArray[k] = leftArray[i]; i++; } else { mergedArray[k] = rightArray[j]; j++; } k++; } if (i >= leftArrayLenght) { while (j < rightArrayLenght) { mergedArray[k] = rightArray[j]; j++; k++; } } if (j >= rightArrayLenght) { while (i < leftArrayLenght) { mergedArray[k] = leftArray[i]; i++; k++; } }}
运行结果:
中间在编译运行的时候会遇到一些细节问题,特此说明:
出现错误:
错误 C1189 #error: "No Target Architecture"
设置如下即可:在_X86_
分布式开发,服务器开发,多线程开发,并发程序设计,任重而道远。
开发
线程
问题
程序
服务器
服务
运行
分布式
错误
任重而道远
分而治之
两个
人员
单元
原理
同时
应用程序
心得
数组
方面
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
云服务器需要备案
高校网络安全 致辞
社交电商软件开发中心
常用的web 服务器
网络安全技术大赛答题入口
帮银行软件开发难
校园网络安全防范宣传
sql数据库表损坏修复工具
数据库什么是概念结构
python导出爬虫数据库
淮安商城软件开发外包公司
网络安全防沉迷绘画
数据库pass是什么意思
廊坊速达网络技术
深圳泽林软件开发公司
陕西hp服务器续保维修
供应链的网络安全管理
有线传感器网络技术特点
虹口区营销软件开发定制价格
sql删除过滤后的数据库
常州源昇软件开发
网络安全检查和风险评估区别
软件开发 华硕笔记本推荐
网络安全标准规范执行情况
互联网科技日益发达
使用最广泛的是什么数据库系统
沈阳软件开发六年后工资
算法工程师和软件开发的区别
2018数据库顶会
数据库新技术课是干嘛的