谁帮我看下这多线程错在哪里!

libinden71 2016-06-23 08:40:12
struct mystruct
{
int *p;//传递线程的头
int intel;//长度
int sum;//需要查找的值
int id;//编号
};

void lens(void *pd)
{
struct mystruct *ps = pd;

for (int *pi = ps->p; pi < ps->p + ps->intel; pi++)
{
if (*pi == ps->sum)
{
printf("线程%d已经找到值%d,地址为%p\n", ps->id,*pi,pi);
return;
}
}
printf("线程%d查找结束,未找到!\n", ps->id);
}

void main()
{
int sum = 0;
char array[100] = { 0 };
time_t ts;
unsigned int times = time(&ts);
srand(times);
for (int i = 0; i < 100; i++)
{
array[i] = rand() % 100;
}
for (int i = 0; i < 100; i++)
{
printf("%3d", array[i]);
if ((i + 1) % 10 == 0)
{
printf("\n");
}
}


scanf("%d", &sum);
struct mystruct xc[10];
for (int i = 0; i < 10; i++)
{

xc[i].p = array + 10 * i;
xc[i].intel = 10;
xc[i].id = i;
xc[i].sum = sum;
_beginthread(lens, 0, &xc[i]);
}
system("pause");
}
谁帮我看看着程序错在哪里 printf("线程%d已经找到值%d,地址为%p\n", ps->id,*pi,pi); 输出的时候只有第8个线程找到,这是什么情况!
...全文
131 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cutmelon 2016-06-24
  • 打赏
  • 举报
回复
仔细看了一下,char array[100] = { 0 };这句替换成int array[100];,不然你的指针就乱了
libinden71 2016-06-24
  • 打赏
  • 举报
回复
引用 4 楼 qq423399099 的回复:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<process.h>
struct mystruct
{
	int *p;//传递线程的头
	int intel;//长度
	int sum;//需要查找的值
	int id;//编号
};

void lens(void *pd)
{
	struct mystruct *ps = (struct mystruct *)pd;

	for (int *pi = ps->p; pi < ps->p + ps->intel; pi++)
	{
		if (*pi == ps->sum)
		{
			printf("线程%d已经找到值%d,地址为%p\n", ps->id, *pi, pi);
			return;
		}
	}
	printf("线程%d查找结束,未找到!\n", ps->id);
}

void main()
{
	int sum = 0;
	int array[100] = { 0 };
	time_t ts;
	unsigned int times = time(&ts);
	srand(times);
	for (int i = 0; i < 100; i++)
	{
		array[i] = rand() % 100;
	}
	for (int i = 0; i < 100; i++)
	{
		printf("%3d", array[i]);
		if ((i + 1) % 10 == 0)
		{
			printf("\n");
		}
	}


	scanf("%d", &sum);
	struct mystruct xc[10];
	for (int i = 0; i < 10; i++)
	{

		xc[i].p = array + 10 * i;
		xc[i].intel = 10;
		xc[i].id = i;
		xc[i].sum = sum;
		_beginthread(lens, 0, &xc[i]);
	}
	system("pause");
}
非常感谢!
libinden71 2016-06-24
  • 打赏
  • 举报
回复
引用 3 楼 cutmelon 的回复:
仔细看了一下,char array[100] = { 0 };这句替换成int array[100];,不然你的指针就乱了
感谢 疏忽了!
小灸舞 版主 2016-06-24
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<process.h>
struct mystruct
{
	int *p;//传递线程的头
	int intel;//长度
	int sum;//需要查找的值
	int id;//编号
};

void lens(void *pd)
{
	struct mystruct *ps = (struct mystruct *)pd;

	for (int *pi = ps->p; pi < ps->p + ps->intel; pi++)
	{
		if (*pi == ps->sum)
		{
			printf("线程%d已经找到值%d,地址为%p\n", ps->id, *pi, pi);
			return;
		}
	}
	printf("线程%d查找结束,未找到!\n", ps->id);
}

void main()
{
	int sum = 0;
	int array[100] = { 0 };
	time_t ts;
	unsigned int times = time(&ts);
	srand(times);
	for (int i = 0; i < 100; i++)
	{
		array[i] = rand() % 100;
	}
	for (int i = 0; i < 100; i++)
	{
		printf("%3d", array[i]);
		if ((i + 1) % 10 == 0)
		{
			printf("\n");
		}
	}


	scanf("%d", &sum);
	struct mystruct xc[10];
	for (int i = 0; i < 10; i++)
	{

		xc[i].p = array + 10 * i;
		xc[i].intel = 10;
		xc[i].id = i;
		xc[i].sum = sum;
		_beginthread(lens, 0, &xc[i]);
	}
	system("pause");
}
cutmelon 2016-06-23
  • 打赏
  • 举报
回复
看你的代码,意思是随机产生100个数,然后启动10个线程,每个线程负责10个数字,在这10个数字中找到输入的一个数,是吧?这里头有随机的,只有一个线程能找到不是很正常吗?你要输入大于100的数,一个都找不到呢
libinden71 2016-06-23
  • 打赏
  • 举报
回复
没人帮我看看啊?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧