Ignore:
File:
1 edited

Legend:

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

    r0f4f1b2 rbab75df6  
    3030#include <test.h>
    3131#include <atomic.h>
    32 #include <stdbool.h>
    3332#include <proc/thread.h>
    3433
     
    3736#define THREADS  5
    3837
    39 static atomic_bool finish;
     38static atomic_t finish;
     39static atomic_t threads_finished;
    4040
    4141static void threadtest(void *data)
    4242{
     43        thread_detach(THREAD);
     44
    4345        while (atomic_load(&finish)) {
    4446                TPRINTF("%" PRIu64 " ", THREAD->tid);
    4547                thread_usleep(100000);
    4648        }
     49        atomic_inc(&threads_finished);
    4750}
    4851
    4952const char *test_thread1(void)
    5053{
    51         atomic_store(&finish, true);
     54        unsigned int i;
     55        size_t total = 0;
    5256
    53         thread_t *threads[THREADS] = { };
     57        atomic_store(&finish, 1);
     58        atomic_store(&threads_finished, 0);
    5459
    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 {
     60        for (i = 0; i < THREADS; i++) {
     61                thread_t *t;
     62                if (!(t = thread_create(threadtest, NULL, TASK,
     63                    THREAD_FLAG_NONE, "threadtest"))) {
    6264                        TPRINTF("Could not create thread %d\n", i);
    6365                        break;
    6466                }
     67                thread_ready(t);
     68                total++;
    6569        }
    6670
     
    6872        thread_sleep(10);
    6973
    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);
     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);
    7778        }
    7879
Note: See TracChangeset for help on using the changeset viewer.