diff options
author | Stefan Zabka <zabkaste@hu-berlin.de> | 2020-07-10 14:24:46 +0200 |
---|---|---|
committer | Stefan Zabka <zabkaste@hu-berlin.de> | 2020-07-10 14:24:46 +0200 |
commit | 90358a35a87125c84815fd1e82a30cb17d94d918 (patch) | |
tree | a920132a7e87013b54835d481b6bc24654258e7e /04_exercise/quicksort.c | |
parent | 6937968af721c32be8b6a0247f7552470084e874 (diff) | |
download | betriebssysteme-90358a35a87125c84815fd1e82a30cb17d94d918.tar.gz betriebssysteme-90358a35a87125c84815fd1e82a30cb17d94d918.zip |
Useless committhreadpool
Diffstat (limited to '04_exercise/quicksort.c')
-rw-r--r-- | 04_exercise/quicksort.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/04_exercise/quicksort.c b/04_exercise/quicksort.c index ade513b..7398282 100644 --- a/04_exercise/quicksort.c +++ b/04_exercise/quicksort.c @@ -4,17 +4,33 @@ #include <stdlib.h> #include <time.h> #include <string.h> +#include <pthread.h> static size_t partition(int v[], size_t len); /* TODO: quicksort-Implementation parallelisieren */ -static void quicksort(int list[], size_t len) { - if (len <= 1) return; +typedef struct quicksort_param { + int *list; + size_t len; +} quicksort_param; + +TASK(int, quicksort, quicksort_param) + +int quicksort(quicksort_param param) { + int *list = param.list; + size_t len = param.len; + fprintf(stderr, "Thread %ld: quicksort being called with list %p and len %ld \n", pthread_self(), (void *) list, len); + if (len <= 1) return 0; size_t mid = partition(list, len); - quicksort(list, mid); - quicksort(list + mid + 1, len - mid - 1); + quicksort_fut fut1_t = quicksortFuture((quicksort_param){list, mid}); + quicksort_fut fut2_t = quicksortFuture((quicksort_param){list + mid + 1, len - mid - 1}); + quicksort_fut *fut1 = quicksortAsync(& fut1_t); + quicksort_fut *fut2 = quicksortAsync(& fut2_t); + quicksortAwait(fut1); + quicksortAwait(fut2); + return 0; } size_t partition(int v[], size_t len) { @@ -108,7 +124,7 @@ int main(int argc, const char *argv[]) { /* sort it and print the sorted list if it's not too long */ struct timespec start, end, dt; clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start); - quicksort(list, list_len); + quicksort((quicksort_param){list, list_len}); clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end); dt = time_diff(start, end); printf("---- Sortiert: %i ----\n", list_is_sorted(list, list_len)); |