首页 > 解决方案 > 使用 2 个线程搜索

问题描述

'这段代码中的线程是否正确?我正在使用 2 个线程在数组中搜索特定键,一个线程在数组的前半部分搜索,第二个线程在数组的后半部分搜索。我创建了一个名为 Parameters 的结构,我用我的参数填充它并将其传递给线程。我制作了两个参数对象以传递给两个不同的线程。两者都有相同的数组和相同的键,但是两个参数的起点和终点不同,因为一个线程必须在前半部分搜索,而另一个线程必须在后半部分搜索。起点和终点相应设置。


#include <pthread.h>
#include<unistd.h> 
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdlib.h>
#include <iostream>
using namespace std;

#define len 5



struct Parameters{
   int start;
   int end;
   int*arr;
   int key;
};

void* search(void* param)
{
   Parameters *pm = (Parameters*) param;
   int s = pm->start;
   int e = pm->end;
   int *A = pm->arr;
   int k = pm->key;
   bool flag = false;
   for(int i= s; i<e ;i++){
      if(A[i] == k){
         flag = true;
      }
   }

  pthread_exit( (void*) flag);

}

int main(int argc,char* args[])
{
  pthread_t id[2];

  int A[len] ;
  cout<<"Enter "<<len<<" elements \n";
  for(int i=0;i<len;i++){
     cin>>A[i];
  }
  Parameters p;
  p.arr = A;
  p.start = 0;
  p.end = len/2;
  p.key = 7;
  pthread_create(&id[0],NULL,&search,&p);

  Parameters p2;
  p2.arr = A;
  p2.start = len/2;
  p2.end = len;
  p2.key = 7;

  pthread_create(&id[1],NULL,&search,&p2);

  bool *found =  new bool(false);
  for(int i=0;i<2;i++){
    pthread_join(id[i], (void**)found);
  }

  if(*found==true){
    cout<<"Found\n";
  }
  else{
    cout<<"Not found\n";
  }

  return 0;
}

标签: c++arraysmultithreadingsearch

解决方案


推荐阅读