Changes in kernel/test/thread/thread1.c [0f4f1b2:bab75df6] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/test/thread/thread1.c
r0f4f1b2 rbab75df6 30 30 #include <test.h> 31 31 #include <atomic.h> 32 #include <stdbool.h>33 32 #include <proc/thread.h> 34 33 … … 37 36 #define THREADS 5 38 37 39 static atomic_bool finish; 38 static atomic_t finish; 39 static atomic_t threads_finished; 40 40 41 41 static void threadtest(void *data) 42 42 { 43 thread_detach(THREAD); 44 43 45 while (atomic_load(&finish)) { 44 46 TPRINTF("%" PRIu64 " ", THREAD->tid); 45 47 thread_usleep(100000); 46 48 } 49 atomic_inc(&threads_finished); 47 50 } 48 51 49 52 const char *test_thread1(void) 50 53 { 51 atomic_store(&finish, true); 54 unsigned int i; 55 size_t total = 0; 52 56 53 thread_t *threads[THREADS] = { }; 57 atomic_store(&finish, 1); 58 atomic_store(&threads_finished, 0); 54 59 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"))) { 62 64 TPRINTF("Could not create thread %d\n", i); 63 65 break; 64 66 } 67 thread_ready(t); 68 total++; 65 69 } 66 70 … … 68 72 thread_sleep(10); 69 73 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); 77 78 } 78 79
Note:
See TracChangeset
for help on using the changeset viewer.