Linear search using Multi-threading
Given a large file of integers, search for a particular element in it using multi-threading. Examples:
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 presentPrerequisite : Multi-threading
Approach : First create n threads. Then, divide array in to four parts one section for each thread and apply linear search on individual section using multithreading and check whether the key element is present or not.
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 4int 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 threadsvoid* 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 Codeint 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;} |
Output:
Key not present
Exercise: The above code divides array into four subarrays. Extend this to take a parameter that decides number of divisions (or threads).


