c++ - 使用 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;
}
解决方案
推荐阅读
- php - 使用多个参数重写 URL 时找不到页面
- haskell - 为什么 GHCi 在此实例声明中报告“约束必须是单型”?
- php - 来自 AWS Launch Configuration 的用户数据未执行 Composer 安装
- sql - 根据在 Oracle SQL 中输入的日期获取 ID 的值
- c# - 是否可以在机器人中具有导出到 excel 按钮?
- angular - 离子不更新视图中的变量
- python - 尝试在 Python 上制作 Snake 游戏。我在哪里下载光标扩展
- java - 变量“double”给我错误,程序正在执行无限循环?
- ios - 隐藏某个表格行 - Swift 4
- excel-formula - 需要公式:复制单元格,省略项目前后的文本