【已解决】C语言实现多线程检索数据

发布时间:2024年01月14日

本博文源于笔者正在学习的c语言。学习如何用多线程进行检索数据。这里以检索一个数组的数据为例,给出代码,并分析如何进行线程通信,如果检索到,其余就别检索了。

问题来源

想要用多线程检索数据

问题解决方案

#define _CRT_SECURE_NO_WARNINGS
#include<Windows.h>
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<time.h>
#include<process.h>
int isfind = 0;
struct findinfo {
	int *pstart;
	int length;
	int findnum;
	int id;
};

void findit(void *p) {
	struct findinfo *ps = p;
	printf("\n线程%d开始查找", ps->id);
	for (int *pf = ps->pstart; pf < ps->pstart + ps->length; pf++) {
		if (isfind == 1) {
			printf("\n线程%d结束查找,其他线程已经找到", ps->id);
			return;
		}
		if (*pf == ps->findnum) {
			printf("线程%d,数据%d,地址%p", ps->id, *pf, pf);
			isfind = 1;
			return;
		}
	
	}
	printf("\n线程%d,结束查找", ps->id);

}
void main() {
	int a[10] = { 86,53,25,12,10,11,18,5,3,4 };
	for (int i = 0; i < 10; i++) {
		printf("%d ", a[i]);
	}

	printf("\n想要查找的数据是:");
	int num;
	scanf("%d", &num);
	struct findinfo info[10];
	for (int i = 0; i < 10; i++) {
		info[i].pstart = a + 10 * i;
		info[i].length = 10;
		info[i].id = i;
		info[i].findnum = num;
		_beginthread(findit ,0, &info[i]);

	}
	getchar();
	getchar();
}

代码实现效果

在这里插入图片描述

总结

这段代码效果,通过全局变量作为线程通信的变量,实现了,查找成功就不让其他线程查找了。值得收藏借鉴。

文章来源:https://blog.csdn.net/m0_37149062/article/details/135587560
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。