diff options
Diffstat (limited to 'tests/test02.c')
-rw-r--r-- | tests/test02.c | 62 |
1 files changed, 0 insertions, 62 deletions
diff --git a/tests/test02.c b/tests/test02.c deleted file mode 100644 index 1cd0c1a..0000000 --- a/tests/test02.c +++ /dev/null @@ -1,62 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <time.h> -#include <unistd.h> - -#include "linen.h" - - -#define NUM_THREADS 10 - - -/* Argument for thread function */ -typedef struct { - useconds_t delay; - int id; -} f_arg_t; - - -/* Function for threads to run */ -void* f(void* arg) { - f_arg_t* a = (f_arg_t*)arg; - usleep(a->delay); - printf(" Hello from thread #%d!\n", a->id); - return (void*)&(a->delay); -} - - -void main() { - printf("\x1B[1mTEST 02: threads print after random delay " - "while getting joined consecutively:\x1B[0m\n"); - - /* Thread handles and arguments */ - linen_thread_t ts[NUM_THREADS]; - f_arg_t args[NUM_THREADS]; - - /* Set arguments */ - srand(time(NULL)); - for (int i = 0; i < NUM_THREADS; i++) { - args[i].delay = (useconds_t)rand() % 1000000; - args[i].id = i; - } - - /* Spawn threads */ - for (int i = 0; i < NUM_THREADS; i++) { - int r = linen_thread_create(&ts[i], f, (void*)&args[i]); - if (r) { - printf(" Failed to spawn thread #%d with error %d\n", i, r); - } - } - - /* Wait for each thread to finish in order, and print its argument. - * The first message only prints once thread #0 is done, and so on. */ - for (int i = 0; i < NUM_THREADS; i++) { - useconds_t* pd; - int r = linen_thread_finish(ts[i], (void**)&pd); - if (r) { - printf(" Failed to join thread #%d with error %d\n", i, r); - } else { - printf(" Thread #%d slept for %dms\n", i, *pd / 1000); - } - } -} |