当前位置

网站首页> 程序设计 > 开源项目 > 编程语言 > 浏览文章

C 协同程序 Coroutine

作者:小梦 来源: 网络 时间: 2024-05-15 阅读:

开源中国推出 PaaS@OSC 代码演示和运行平台

Coroutine 是 C 的协同程序。

Coroutine 支持 32 位和 64 位模式,支持 Mac OS X 和 Linux。

构建:

./build.sh

API

struct coroutine;struct coroutine *coroutine_create(void (*func)(void *), void *arg);void coroutine_delete(struct coroutine *co);struct coroutine *coroutine_self(void);int  coroutine_status(struct coroutine *co);void coroutine_resume(struct coroutine *co);void coroutine_yield(void);int  coroutine_getstacksize(void);void coroutine_setstacksize(int size);

Example

这是包括在 coroutine/example/example.c 里面的:

#include <stdio.h>#include <stdlib.h>#include <coroutine.h>struct task {    char buffer[1024];};void readline(void *arg){    struct coroutine *co = coroutine_self();    struct task *task = arg;    while (1) {        printf("[coroutine %p] read: ", co);        if (fgets(task->buffer, sizeof(task->buffer), stdin) == NULL)            break;        coroutine_yield();    }}void echoline(void *arg){    struct coroutine *co = coroutine_self();    struct task *task = arg;    while (1) {        printf("[coroutine %p] echo: %s", co, task->buffer);        coroutine_yield();    }}int main(int argc, char **argv){    struct task task;    struct coroutine *coread = coroutine_create(readline, &task);    struct coroutine *coecho = coroutine_create(echoline, &task);    while (1) {        coroutine_resume(coread);        if (coroutine_status(coread) == COROUTINE_DEAD)            break;        coroutine_resume(coecho);    }    coroutine_delete(coread);    coroutine_delete(coecho);    return 0;}

相关阅读