Serene Runtime 1.0.0
C runtime for the Serene programming language
Loading...
Searching...
No Matches
03_wait_for.c File Reference
#include <stdio.h>
#include <serene/runtime.h>
Include dependency graph for 03_wait_for.c:

Go to the source code of this file.

Functions

static srn_fiber_result_t worker (srn_context_t *ctx, void *arg)
 
static srn_fiber_result_t waiter (srn_context_t *ctx, void *arg)
 
int main (void)
 

Variables

static int answer
 
static srn_fiber_tworker_fiber
 

Function Documentation

◆ main()

int main ( void )

Definition at line 58 of file 03_wait_for.c.

58 {
59 srn_mm_t *mm = srn_mm_init();
60 srn_engine_t *engine = srn_engine_make(mm);
61 srn_context_t *ctx = srn_context_make(engine);
62 srn_scheduler_t *sched = engine->scheduler;
63
64 // Order of creation sets who runs first on one worker. The waiter runs first
65 // and parks, then the worker finishes and wakes it.
66 (void)srn_fiber_make(ctx, sched, waiter, nullptr, 0);
67 worker_fiber = srn_fiber_make(ctx, sched, worker, nullptr, 0);
68
69 srn_sched_run(sched, 1);
70
72 srn_engine_shutdown(engine);
74 return 0;
75}
static srn_fiber_result_t worker(srn_context_t *ctx, void *arg)
Definition 03_wait_for.c:41
static srn_fiber_t * worker_fiber
Definition 03_wait_for.c:39
static srn_fiber_result_t waiter(srn_context_t *ctx, void *arg)
Definition 03_wait_for.c:48
srn_context_t * srn_context_make(srn_engine_t *engine)
Make an empty context, by allocating a new memory block.
Definition context.c:38
int srn_context_release(srn_context_t *ctx)
Definition context.c:63
srn_mm_t * srn_mm_init()
Initialize the memory manager, this function will panic on error.
Definition default.c:294
void srn_mm_shutdown(srn_mm_t *mm)
Shut down the memory manager and release the resources.
Definition default.c:325
srn_engine_t * srn_engine_make(srn_mm_t *mm)
Definition engine.c:92
void srn_engine_shutdown(srn_engine_t *engine)
Definition engine.c:123
srn_fiber_t * srn_fiber_make(srn_context_t *ctx, srn_scheduler_t *sched, srn_fiber_entry_t entry, void *arg, size_t stack_size)
Create a fiber that will run entry(ctx, arg).
Definition fiber.c:169
void srn_sched_run(srn_scheduler_t *sched, int nworkers)
Run the scheduler with nworkers os threads draining it, returning once the pool goes quiescent (every...
Definition scheduler.c:784
Engine is a structure to own the long living and main pieces of the compiler.
Definition engine.h:49
srn_scheduler_t * scheduler
The fiber scheduler, set by srn_sched_init.
Definition engine.h:67
Main memory manager structure that will own all the allocated blocks and data.
Definition interface.h:112
Here is the call graph for this function:

◆ waiter()

static srn_fiber_result_t waiter ( srn_context_t * ctx,
void * arg )
static

Definition at line 48 of file 03_wait_for.c.

48 {
49 (void)ctx;
50 (void)arg;
51 printf("waiter: blocking on the worker\n");
53 printf("waiter: worker produced %s\n",
54 result == &answer ? "the expected value" : "an unexpected value");
55 return &answer;
56}
static int answer
Definition 03_wait_for.c:36
void * srn_fiber_result_t
Definition fiber.h:117
srn_fiber_result_t srn_fiber_wait_for(srn_fiber_t *target)
Block the calling fiber until target finishes, then return its result.
Definition scheduler.c:963
Here is the call graph for this function:
Here is the caller graph for this function:

◆ worker()

static srn_fiber_result_t worker ( srn_context_t * ctx,
void * arg )
static

Definition at line 41 of file 03_wait_for.c.

41 {
42 (void)ctx;
43 (void)arg;
44 printf("worker: computing\n");
45 return &answer;
46}
Here is the caller graph for this function:

Variable Documentation

◆ answer

int answer
static

Definition at line 36 of file 03_wait_for.c.

◆ worker_fiber

srn_fiber_t* worker_fiber
static

Definition at line 39 of file 03_wait_for.c.