All checks were successful
Build documentation / build-and-deploy (push) Successful in 52s
61 lines
1.2 KiB
C
61 lines
1.2 KiB
C
#include <alloc/liballoc.h>
|
|
#include <limits.h>
|
|
#include <m/proc.h>
|
|
#include <m/status.h>
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
#include <string/string.h>
|
|
|
|
#define EXAMPLE 1
|
|
|
|
#if EXAMPLE == 1
|
|
int mutex_rid;
|
|
|
|
void mythread (void) {
|
|
for (int j = 0; j < 10; j++) {
|
|
proc_mutex_lock (mutex_rid, RV_PRIVATE);
|
|
|
|
for (size_t i = 0; i < 3; i++)
|
|
proc_test ('b');
|
|
|
|
proc_mutex_unlock (mutex_rid, RV_PRIVATE);
|
|
|
|
for (volatile int i = 0; i < 200 * 1000 * 1000; i++)
|
|
;
|
|
}
|
|
|
|
proc_quit ();
|
|
}
|
|
|
|
int make_thread (void (*fn) (void)) {
|
|
size_t stack_size = 256 * PAGE_SIZE;
|
|
void* stack = malloc (stack_size);
|
|
if (stack == NULL)
|
|
return -ST_OOM_ERROR;
|
|
|
|
uintptr_t stack_top = (uintptr_t)stack + stack_size;
|
|
return proc_spawn_thread (stack_top, stack_size, (void*)fn);
|
|
}
|
|
|
|
void app_main (void) {
|
|
mutex_rid = proc_create_resource (200, PR_MUTEX, RV_PRIVATE, NULL);
|
|
|
|
make_thread (&mythread);
|
|
|
|
for (int j = 0; j < 10; j++) {
|
|
proc_mutex_lock (mutex_rid, RV_PRIVATE);
|
|
|
|
for (size_t i = 0; i < 3; i++)
|
|
proc_test ('a');
|
|
|
|
proc_mutex_unlock (mutex_rid, RV_PRIVATE);
|
|
|
|
for (volatile int i = 0; i < 400 * 1000 * 1000; i++)
|
|
;
|
|
}
|
|
|
|
for (;;)
|
|
;
|
|
}
|
|
#endif
|