Búsqueda lineal usando subprocesos múltiples

Dado un archivo grande de números enteros, busque un elemento particular en él utilizando subprocesos múltiples. Ejemplos:

Input : 1, 5, 7, 10, 12, 14, 15, 18, 20, 
        22, 25, 27, 30, 64, 110, 220
Output :if key = 20
Key element found

Input :1, 5, 7, 10, 12, 14, 15, 18, 20, 
       22, 25, 27, 30, 64, 110, 220
Output :if key = 202
Key not present

Requisito previo: subprocesamiento múltiple 

Enfoque: primero cree n hilos. Luego, divida la array en cuatro partes, una sección para cada subproceso y aplique la búsqueda lineal en la sección individual utilizando subprocesos múltiples y verifique si el elemento clave está presente o no.

Command : g++ -pthread linear_thread.cpp

C++

// CPP code to search for element in a
// very large file using Multithreading
#include <iostream>
#include <pthread.h>
using namespace std;
 
// Max size of array
#define max 16
 
// Max number of threads to create
#define thread_max 4
 
int a[max] = { 1, 5, 7, 10, 12, 14, 15,
               18, 20, 22, 25, 27, 30,
               64, 110, 220 };
int key = 202;
 
// Flag to indicate if key is found in a[]
// or not.
int f = 0;
 
int current_thread = 0;
 
// Linear search function which will
// run for all the threads
void* ThreadSearch(void* args)
{
    int num = current_thread++;
 
    for (int i = num * (max / 4);
         i < ((num + 1) * (max / 4)); i++)
    {
        if (a[i] == key)
            f = 1;
    }
}
 
// Driver Code
int main()
{
    pthread_t thread[thread_max];
 
    for (int i = 0; i < thread_max; i++) {
        pthread_create(&thread[i], NULL,
                      ThreadSearch, (void*)NULL);
    }
 
    for (int i = 0; i < thread_max; i++) {
        pthread_join(thread[i], NULL);
    }
 
    if (f == 1)
        cout << "Key element found" << endl;
    else
        cout << "Key not present" << endl;
    return 0;
}

Producción:

Key not present

Ejercicio: El código anterior divide la array en cuatro subarreglos. Amplíe esto para tomar un parámetro que decida el número de divisiones (o hilos).

Publicación traducida automáticamente

Artículo escrito por rishabh_jain y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *