diff --git a/Multithreaded_Search/parallel.c b/Multithreaded_Search/parallel.c
new file mode 100644
index 0000000000000000000000000000000000000000..242ee99426e20f6a3625965ab92dd2aa2ffb48b0
--- /dev/null
+++ b/Multithreaded_Search/parallel.c
@@ -0,0 +1,85 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <pthread.h>
+#include <time.h>
+
+#define SIZE 16
+#define THREADS 4
+
+struct arguments{
+
+	int start;
+	int end;
+	int *array;
+
+};
+
+typedef struct arguments arguments_t;
+
+int get_max(int *array, int start, int end){
+	
+	int max = 0;
+	for(int i = start; i < end; i++){
+		if(array[i] > max){
+			max = array[i];
+		}
+	}
+	return max;
+}
+
+void *worker(void *params){
+	arguments_t *args = (arguments_t *) params;
+	return (void*)(long)get_max(args->array, args->start, args->end);; 
+}
+
+int *random_array(int size){
+	srand(time(NULL));
+	int *random_arr = malloc(size * sizeof(int));
+	for(int i = 0; i < size; i++){
+		*(random_arr + i) = random();	
+	}
+	return random_arr;
+}
+
+void pretty_print(int *arr, int size){
+	for(int i = 0; i < size; i++){
+		printf("%d\n", *(arr + i));
+	}
+}
+
+int main(void){
+	int *arr = random_array(SIZE);
+	pretty_print(arr, SIZE);
+	int *arr_max = malloc(THREADS*sizeof(int));
+	
+	pthread_t threads[THREADS];
+	int len = SIZE/THREADS;
+	for(int i = 0; i < THREADS; i++){
+		arguments_t *arguments = malloc(sizeof(arguments));
+		arguments->array = arr;
+		arguments->start = i*len;
+		arguments->end =(i == THREADS-1)?(SIZE):(i*len+ len);		
+		printf("from %d to %d\n", arguments->start, arguments->end);
+
+		if(pthread_create(&threads[i], NULL, worker, arguments) != 0){
+			perror("CREATE error");
+			free(arr);
+			free(arr_max);
+			return -1;
+		}
+	}
+	void *ret_ptr = NULL;
+	for(int i = 0; i < THREADS; i++){
+		if(pthread_join(threads[i], &ret_ptr)){
+			free(arr);
+			free(arr_max);
+			perror("JOIN error");
+			return -1;
+		}
+		*(arr_max + i) = (long)ret_ptr;
+	}
+	pretty_print(arr_max, THREADS);
+
+	return 0;
+}