Overview #
The schedule
module provides the functionality for controlling the behavior of
process.
Index #
csp_async(tasks) #
csp_async(tasks)
runs tasks concurrently. If there are multiple tasks, you
need to separate them with ;
and libcsp will create and start a process for
each task. It’s something like the go
in golang.
Example:
void say(const char *word) {
printf("%s\n", word);
}
csp_async(say("Hello world"));
csp_async(say("你好"); say("世界"));
NOTE
:
- All tasks should be non-pointer function call.
- The return of all function calls will be ignored.
csp_sync(tasks) #
csp_sync(tasks)
works similarly to csp_async(tasks)
except that it will block
until all tasks finish.
Example:
void add(int a, int b, int *sum) {
*sum = a + b;
}
int x, y;
csp_sync(add(1, 2, &x); add(3, 4, &y));
printf("1 + 2 + 3 + 4 is %d\n", x + y);
NOTE
:
- All tasks should be non-pointer function call.
- The return of all function calls will be ignored.
csp_block(tasks) #
csp_block(tasks)
is used to wrap tasks which will likely cause the thread to
block(e.g. syscall). libcsp will start another worker thread and keep current
thread running until all tasks finish.
Example:
int n;
char buff[256];
csp_block({
n = read(fd, buff, sizeof(buff));
})
NOTE
:
- Task doesn’t have to be function calls. It can be any c statement.
- Don’t use any scheduling method(i.e.
csp_async
,csp_sync
,csp_block
,csp_yield
, andcsp_hangup
) in tasks directly or indirectly.
csp_yield() #
csp_yield()
gives up current CPU and schedules to run other processes. It’s
something like runtime.Gosched()
in go.
Example:
csp_yield();
csp_hangup(nanosec) #
csp_hangup(nanosec)
make current process hang up for nanosec
nanoseconds.
Example:
csp_hangup(100);