Ignore:
File:
1 edited

Legend:

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

    r0f4f1b2 r1871118  
    3838
    3939static atomic_bool finish;
     40static atomic_size_t threads_finished;
    4041
    4142static void threadtest(void *data)
     
    4546                thread_usleep(100000);
    4647        }
     48        atomic_inc(&threads_finished);
    4749}
    4850
    4951const char *test_thread1(void)
    5052{
     53        unsigned int i;
     54        size_t total = 0;
     55
    5156        atomic_store(&finish, true);
     57        atomic_store(&threads_finished, 0);
    5258
    53         thread_t *threads[THREADS] = { };
    54 
    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 {
     59        for (i = 0; i < THREADS; i++) {
     60                thread_t *t;
     61                if (!(t = thread_create(threadtest, NULL, TASK,
     62                    THREAD_FLAG_NONE, "threadtest"))) {
    6263                        TPRINTF("Could not create thread %d\n", i);
    6364                        break;
    6465                }
     66                thread_ready(t);
     67                total++;
    6568        }
    6669
     
    6972
    7073        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        while (atomic_load(&threads_finished) < total) {
     75                TPRINTF("Threads left: %zu\n", total - atomic_load(&threads_finished));
     76                thread_sleep(1);
    7777        }
    7878
Note: See TracChangeset for help on using the changeset viewer.