Линейный поиск с использованием многопоточности

Опубликовано: 17 Января, 2022

Для большого файла целых чисел найдите в нем определенный элемент, используя многопоточность.

Примеры:

Ввод: 1, 5, 7, 10, 12, 14, 15, 18, 20, 
        22, 25, 27, 30, 64, 110, 220
Вывод: если ключ = 20
Обнаружен ключевой элемент

Ввод: 1, 5, 7, 10, 12, 14, 15, 18, 20, 
       22, 25, 27, 30, 64, 110, 220
Вывод: если ключ = 202
Ключ отсутствует

Предпосылка: многопоточность

Рекомендуется: сначала попробуйте свой подход в {IDE}, прежде чем переходить к решению.

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 multhreading 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 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;
}


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).

Want to learn from the best curated videos and practice problems, check out the C Foundation Course for Basic to Advanced C.



Previous
Print Fibonacci Series in reverse order
Next
Factorial of Large Number Using boost multiprecision Library
Recommended Articles
Page :
Article Contributed By :
rishabh_jain
@rishabh_jain
Vote for difficulty
Article Tags :
  • cpp-multithreading
  • C Language
  • Searching
Practice Tags :
  • Searching
Report Issue
C

РЕКОМЕНДУЕМЫЕ СТАТЬИ

20 Февраля, 2023