#include "mt_os.h" #include "minithread.h" #include "synch.h" #include "main.h" #include "clock.h" #include #include #include #include "handle.h" #if 0 #define DEBUG(p) printf p #else #define DEBUG(p) #endif /* The first argument is the address of the function to be forked off, * and the second is the argument to the function. */ int mt_minithread_fork(unsigned fn, unsigned arg) { run_struct *rs; minithread_t mt; int handle; DEBUG(("mt_minithread_fork\n")); disable_interrupts(); rs = (run_struct *) malloc (sizeof(run_struct)); rs->paddress = fn; rs->arg = arg; mt = minithread_fork(run, (arg_t)rs); handle = newhandle(mt); return handle; } int mt_minithread_self() { minithread_t mt; int handle; DEBUG(("mt_minithread_self\n")); mt = minithread_self(); ptrtohandle(mt, &handle); return handle; } int mt_minithread_yield() { DEBUG(("mt_minithread_yield\n")); minithread_yield(); return 0; } int mt_minithread_die() { DEBUG(("mt_minithread_die\n")); assert(0); } int mt_semaphore_create() { semaphore_t sem; int handle; DEBUG(("mt_semaphore_create\n")); sem = semaphore_create(); handle = newhandle(sem); return handle; } int mt_semaphore_destroy(unsigned semhandle) { semaphore_t sem; DEBUG(("t_semaphore_destroy\n")); if (handletoptr(semhandle, &sem)) { semaphore_destroy(sem); deletehandle(semhandle); } return 0; } int mt_semaphore_initialize(unsigned semhandle, unsigned cnt) { semaphore_t sem; DEBUG(("mt_semaphore_initialize\n")); if (handletoptr(semhandle, &sem)) { semaphore_initialize(sem, cnt); } return 0; } int mt_semaphore_P(unsigned semhandle) { semaphore_t sem; DEBUG(("mt_semaphore_P\n")); if (handletoptr(semhandle, &sem)) { semaphore_P(sem); } return 0; } int mt_semaphore_V(unsigned semhandle) { semaphore_t sem; DEBUG(("mt_semaphore_P\n")); if (handletoptr(semhandle, &sem)) { semaphore_V(sem); } return 0; }