Ignore:
File:
1 edited

Legend:

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

    r0f4f1b2 r31e15be  
    3838
    3939static atomic_bool finish;
     40static atomic_size_t threads_finished;
    4041
    4142static void threadtest(void *data)
    4243{
     44        thread_detach(THREAD);
     45
    4346        while (atomic_load(&finish)) {
    4447                TPRINTF("%" PRIu64 " ", THREAD->tid);
    4548                thread_usleep(100000);
    4649        }
     50        atomic_inc(&threads_finished);
    4751}
    4852
    4953const char *test_thread1(void)
    5054{
     55        unsigned int i;
     56        size_t total = 0;
     57
    5158        atomic_store(&finish, true);
     59        atomic_store(&threads_finished, 0);
    5260
    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 {
     61        for (i = 0; i < THREADS; i++) {
     62                thread_t *t;
     63                if (!(t = thread_create(threadtest, NULL, TASK,
     64                    THREAD_FLAG_NONE, "threadtest"))) {
    6265                        TPRINTF("Could not create thread %d\n", i);
    6366                        break;
    6467                }
     68                thread_ready(t);
     69                total++;
    6570        }
    6671
     
    6974
    7075        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);
     76        while (atomic_load(&threads_finished) < total) {
     77                TPRINTF("Threads left: %zu\n", total - atomic_load(&threads_finished));
     78                thread_sleep(1);
    7779        }
    7880
Note: See TracChangeset for help on using the changeset viewer.