Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/test/thread/thread1.c

    rbab75df6 r0f4f1b2  
    3030#include <test.h>
    3131#include <atomic.h>
     32#include <stdbool.h>
    3233#include <proc/thread.h>
    3334
     
    3637#define THREADS  5
    3738
    38 static atomic_t finish;
    39 static atomic_t threads_finished;
     39static atomic_bool finish;
    4040
    4141static void threadtest(void *data)
    4242{
    43         thread_detach(THREAD);
    44 
    4543        while (atomic_load(&finish)) {
    4644                TPRINTF("%" PRIu64 " ", THREAD->tid);
    4745                thread_usleep(100000);
    4846        }
    49         atomic_inc(&threads_finished);
    5047}
    5148
    5249const char *test_thread1(void)
    5350{
    54         unsigned int i;
    55         size_t total = 0;
     51        atomic_store(&finish, true);
    5652
    57         atomic_store(&finish, 1);
    58         atomic_store(&threads_finished, 0);
     53        thread_t *threads[THREADS] = { };
    5954
    60         for (i = 0; i < THREADS; i++) {
    61                 thread_t *t;
    62                 if (!(t = thread_create(threadtest, NULL, TASK,
    63                     THREAD_FLAG_NONE, "threadtest"))) {
     55        for (int i = 0; i < THREADS; i++) {
     56                threads[i] = thread_create(threadtest, NULL,
     57                    TASK, THREAD_FLAG_NONE, "threadtest");
     58
     59                if (threads[i]) {
     60                        thread_start(threads[i]);
     61                } else {
    6462                        TPRINTF("Could not create thread %d\n", i);
    6563                        break;
    6664                }
    67                 thread_ready(t);
    68                 total++;
    6965        }
    7066
     
    7268        thread_sleep(10);
    7369
    74         atomic_store(&finish, 0);
    75         while (atomic_load(&threads_finished) < total) {
    76                 TPRINTF("Threads left: %zu\n", total - atomic_load(&threads_finished));
    77                 thread_sleep(1);
     70        atomic_store(&finish, false);
     71
     72        for (int i = 0; i < THREADS; i++) {
     73                if (threads[i] != NULL)
     74                        thread_join(threads[i]);
     75
     76                TPRINTF("Threads left: %d\n", THREADS - i - 1);
    7877        }
    7978
Note: See TracChangeset for help on using the changeset viewer.