여기에서는 배열의 한 요소를 검색하기 위해 다중 스레딩 개념을 적용하는 방법을 살펴보겠습니다. 여기서 접근 방식은 매우 간단합니다. 스레드를 생성한 다음 배열을 여러 부분으로 나눕니다. 다른 스레드는 다른 부분에서 검색합니다. 그런 다음 요소가 발견되면 플래그를 활성화하여 이를 식별합니다.
예시
#include <stdio.h> #include <pthread.h> #define MAX 16 #define THREAD_MAX 4 int array[MAX] = { 1, 5, 7, 10, 12, 14, 15, 18, 20, 22, 25, 27, 30, 64, 110, 220 }; int key = 18; int flag = 0; //flag to indicate that item is found in the array or not int current_thread = 0; void* ThreadSearch(void* args) { //This is linear search function. It will be running using all threads int num = current_thread++; for (int i = num * (MAX / 4); i < ((num + 1) * (MAX / 4)); i++){ if (array[i] == key) flag = 1; //set flag if key is found } } int main() { pthread_t thread[THREAD_MAX]; for (int i = 0; i < THREAD_MAX; i++) { //create multiple threads pthread_create(&thread[i], NULL, ThreadSearch, (void*)NULL); } for (int i = 0; i < THREAD_MAX; i++) { pthread_join(thread[i], NULL); //wait untill all of the threads are completed } if (flag == 1) printf("Key element is found\n"); else printf("Key element is not present\n"); }
출력
$ gcc 1249.Thread_search.cpp -lpthread $ ./a.out Key element is found