diff options
Diffstat (limited to '04_exercise/quicksort.c')
-rw-r--r-- | 04_exercise/quicksort.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/04_exercise/quicksort.c b/04_exercise/quicksort.c index ade513b..1f0bfb5 100644 --- a/04_exercise/quicksort.c +++ b/04_exercise/quicksort.c @@ -7,14 +7,20 @@ static size_t partition(int v[], size_t len); -/* TODO: quicksort-Implementation parallelisieren */ +static TASK_QS(void, quicksort) static void quicksort(int list[], size_t len) { + fprintf(stderr, "quicksort call with %p, %lu\n", (void*)list, (ulong)len); + if (len <= 1) return; - + size_t mid = partition(list, len); - quicksort(list, mid); - quicksort(list + mid + 1, len - mid - 1); + + quicksort_fut *first = quicksortAsync((quicksort_fut[]){quicksortFuture(list, mid)}); + quicksort_fut *second = quicksortAsync((quicksort_fut[]){quicksortFuture(list + mid + 1, len - mid - 1)}); + + quicksortAwait(first); + quicksortAwait(second); } size_t partition(int v[], size_t len) { @@ -87,7 +93,7 @@ int main(int argc, const char *argv[]) { atexit(&tpRelease); /* read the length of the list from the command line */ - size_t list_len = 30000000; + size_t list_len = 5; if (argc >= 2) { long arg = strtol(argv[1], (char **)&argv[strlen(argv[1])], 10); if (arg > 0) |