多线程应用(三)

#include <stdlib.h>
#include <stdio.h>
#include <Windows.h>
#include <process.h>
int find = 0;//0表示没有找到
int *addr_find = NULL;
typedef struct  
{
    int* pStart;//指向要查找的数组首地址
    int length;//查找区域的空间大小
    int *pFind;//修改标识,当找到后更新为1
    int data;//要查找的元素
    int number;// 记录当前线程的编号
    int **addr;//存储找到的元素地址的地址
} MyStruct;
void findData(void *pStruct)
{
    MyStruct *s = (MyStruct*)pStruct;
    for (int *p = s->pStart; p < s->pStart + 100;p++)
    {
        Sleep(10);
        if (*(s->pFind) != 0)
        {
            printf("线程%d没有找到,被抢先一步了\n", s->number);
            return;
        }
        if (s->data == *p)
        {           
            find = 1;
            *(s->addr) = p;//二级指针 间接修改addr_find值

            printf("第%d个线程找到了元素%d,地址是%p\n", s->number, s->data, *(s->addr));
            return;
        }
    }

    printf("第%d个线程没有找到%d\n", s->number,s->data);

}
void  main()
{
    int a[1000] ;
    for (int i = 0; i <1000; i++)
    {
        a[i] = i;
    }
    MyStruct s[10];//循环外面定义,如果结构体包含字符串元素,则最好定义在循环内部
    for (int j = 0; j < 10;j++)
    {

        s[j].pStart = a + 100 * j;
        s[j].length = 100;
        s[j].number = j;
        s[j].data = 888;
        s[j].pFind = &find;
        s[j].addr = &addr_find;
        _beginthread(findData, 0, &s[j]);
        Sleep(30);//有些机器需要缓冲时间
    }
    Sleep(10000); //有些机器需要缓冲时间
    if (find != 0)
    {
        printf("找到元素的地址是%p 数据内容是%d\n", addr_find, *addr_find);
    }

    system("pause");

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值