#include #include #include #include #include char c = 'a'; int mutex_rid; void mythread (void) { for (;;) { proc_mutex_lock (mutex_rid); for (size_t i = 0; i < 3; i++) proc_test ('b'); proc_mutex_unlock (mutex_rid); } } void make_thread (void* fn) { size_t stack_pages = 256; size_t stack_size = PAGE_SIZE * stack_pages; uintptr_t out_paddr; int mem_rid = proc_create_resource_mem (100, stack_pages, RV_PRIVATE, &out_paddr); proc_map (out_paddr, PROC_MAP_BASE, stack_pages, PM_PRESENT | PM_RW | PM_USER); memset ((void*)PROC_MAP_BASE, 0, stack_size); uintptr_t vstack_top = PROC_MAP_BASE + stack_size; proc_spawn_thread (vstack_top, stack_size, fn); } void app_main (void) { mutex_rid = proc_create_resource_mutex (200, RV_PRIVATE); make_thread (&mythread); for (;;) { proc_mutex_lock (mutex_rid); for (size_t i = 0; i < 3; i++) proc_test ('a'); proc_mutex_unlock (mutex_rid); } }