#include <Windows.h>
#include <process.h>
#include <stdio.h>
#include <time.h>
typedef struct{
int * A;
int num;
int key;
int threadID;
} sParam;
bool Done = FALSE;
#define NUM_THREADS 4
void linearSearch(int * A, int s, int e, int key, DWORD *position)
{
int i;
for (i = s; i < e; i++)
{
if (Done)
{
return;
}
if (A[i] == key)
{
*position = i;
Done = TRUE;
break;
}
Sleep(1);
}
return;
}
unsigned __stdcall pSearch(LPVOID pAvg){
DWORD pos = -1;
if (NULL != pAvg)
{
sParam * inArg = (sParam*)pAvg;
int *A = inArg->A;
int N = inArg->num;
int key = inArg->key;
int tNum = inArg->threadID;
int start, end;
start = ((float)N/NUM_THREADS) * tNum;
end = ((float)N/NUM_THREADS) * (tNum + 1);
if (tNum == (NUM_THREADS - 1))
{
end = N;
}
linearSearch(A, start, end, key, &pos);
delete pAvg;
pAvg = NULL;
}
ExitThread(pos);
}
#define NUM_KEYS 100000
int main(int argc, char * argv[])
{
int i, t,sKey = NUM_KEYS - 1, * positon = new int;
time_t begin;
time_t end;
begin = time(NULL);
HANDLE tHandles[NUM_THREADS];
int * p = (int*)malloc(sizeof(int)*NUM_KEYS);
for (t = 0; t < NUM_KEYS; t++)
{
*(p + t) = t ;
}
for (i = 0; i < NUM_THREADS; i++)
{
sParam * pAvg = new sParam;
pAvg->A = p;
pAvg->num = NUM_KEYS;
pAvg->key = sKey;
pAvg->threadID = i;
tHandles[i] = (HANDLE)_beginthreadex(NULL, 0, pSearch, (LPVOID)pAvg, 0, NULL);
}
WaitForMultipleObjects(NUM_THREADS, tHandles, TRUE, INFINITE);
for(i = 0; i < NUM_THREADS; i++){
GetExitCodeThread(tHandles[i], (LPDWORD)positon);
if (*positon != -1)
{
printf("key = %d found at index %d\n", sKey, *positon);
break;
}
}
end = time(NULL);
printf("cost = %d\r\n", (end - begin));
return 0;
}
分享到:
相关推荐
3. **OpenMP支持**:集成对OpenMP并行编程模型的支持,使得开发者可以轻松地编写并行代码,利用多线程处理复杂计算任务,显著提升程序的并行执行效率。 4. **调试工具**:Intel Visual Fortran Compiler提供了强大...
4. 多线程/并行查找:提高在大量文件中的查找速度。 5. 远程文件查找:集成云存储服务,查找网络上的文件。 6. 文件管理系统:结合查找功能,构建文件分类、整理、备份和分享的工具。 总之,理解并掌握文件查找程序...
在实际应用中,我们还需要考虑性能优化策略,比如多线程并行查找、缓存最近查找结果、使用文件系统缓存等。此外,用户界面设计也很重要,例如实时更新查找进度、提供取消操作、错误处理等,都能提升用户体验。 现在...
8. **多线程支持**:NTL库部分功能支持多线程,使得开发者可以利用多核处理器来加速计算,尤其在需要大量并行计算的场景下。 9. **文档和示例**:NTL库通常会包含详尽的文档和示例代码,帮助开发者快速理解和使用这...
6. **性能优化**:如果需要频繁查找,可以考虑缓存文件列表或利用多线程技术并行处理,进一步提高查找速度。 在源代码中,`codesc.net`可能是一个包含了实现以上步骤的源文件,具体细节需要查看源码才能了解。理解...
这表明项目的开发环境是基于Windows平台,且选择了开源的MinGW作为GCC的Windows版本。 综合以上信息,我们可以推测这个项目可能包含以下知识点: 1. **QT编程**:学习和使用QT库来创建GUI应用,包括控件布局、事件...
在C++Builder中,常用算法有排序(如冒泡排序、选择排序、插入排序、快速排序、归并排序)、查找(如线性查找、二分查找)、图算法(如深度优先搜索、广度优先搜索)、动态规划等。排序算法用于对数据进行排序,选择...
----------------------------...• 优化的图形库 包括定制的 2D 图形库, 3D 图形库基于 OpenGL ES 1.0 (硬件加速可选) • SQLite SQLite SQLite SQLite 用作结构化的数据存储 • 多媒体支持 包括常见的音频、视频和...