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