summaryrefslogtreecommitdiff
path: root/tests/test02.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test02.c')
-rw-r--r--tests/test02.c62
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);
- }
- }
-}