记一次 c 语言 的 多线程查找 简单实现
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <process.h>
#include <time.h>
#include <memory.h>
#define m_MAX 250000
typedef struct s{
int *begin;
int lenth;
int target;
int Id;
int *flag;
int *isFind;
}s_t;
void find(void *p)
{
s_t* pS = (s_t*)p;
int* cur = NULL;
for (cur = pS->begin; cur != pS->begin + pS->lenth; ++cur)
{
if (1 == *(pS->flag))
{
char str[100] = { 0 };
sprintf(str, " thread %d incapable been thread %d Preemptive\n", pS->Id, *(pS->isFind));
printf("%s", str);
_endthread();
}
if ((*cur) == pS->target)
{
printf(TEXT("thread %d finde \n"), pS->Id);
printf(" %d\n", *cur);
Sleep(10);
*(pS->flag) = 1;
*(pS->isFind) = pS->Id;
_endthread();
}
}
{
char str[100] = { 0 };
sprintf(str, " Thread %.5d is incapable \n", pS->Id, *(pS->isFind));
printf("%s", str);
}
_endthread();
}
int main()
{
srand((unsigned int)time(NULL));
int array[m_MAX];
int flag = 0;
int isFind = 0;
int target = rand() % m_MAX;
printf("Need find number is %d \n", target);
int totalThread = 50;
s_t s[50];
int dividedDataSize = (m_MAX / totalThread);
for (int j = 0; j < m_MAX; ++j) {
array[j] = rand()%m_MAX;
}
for (int i = 0; i < totalThread; ++i)
{
s[i].begin = array + (i*dividedDataSize);
s[i].Id = i;
s[i].lenth = (dividedDataSize);
s[i].target = target;
s[i].flag = &flag;
s[i].isFind = &isFind;
_beginthread(find, 0, &s[i]);
Sleep(10);
}
system("pause");
return 0;
}