38 lines
645 B
C++
38 lines
645 B
C++
#include <rt/sem.hpp>
|
|
#include <rt/task.hpp>
|
|
#include <rt/trap.hpp>
|
|
|
|
#include <rt/assert.h>
|
|
|
|
static const int n = 10;
|
|
static rt::sem sem(0);
|
|
|
|
static void poster(void)
|
|
{
|
|
rt::task::drop_privilege();
|
|
for (int i = 0; i < n; ++i)
|
|
{
|
|
rt::task::sleep(5);
|
|
sem.post();
|
|
}
|
|
|
|
rt::task::sleep(15);
|
|
sem.post();
|
|
}
|
|
|
|
static void waiter(void)
|
|
{
|
|
rt::task::drop_privilege();
|
|
for (int i = 0; i < n; ++i)
|
|
{
|
|
rt_assert(sem.timedwait(10), "wait timed out");
|
|
}
|
|
|
|
rt_assert(!sem.timedwait(10), "wait didn't time out");
|
|
|
|
rt::trap();
|
|
}
|
|
|
|
RT_TASK(poster, RT_STACK_MIN, 0);
|
|
RT_TASK(waiter, RT_STACK_MIN, 0);
|