当前位置:  软件>C/C++软件

C 协同程序 Coroutine

    来源:    发布时间:2014-12-15

    本文导语:  Coroutine 是 C 的协同程序。Coroutine 支持 32 位和 64 位模式,支持 Mac OS X 和 Linux。构建:./build.shAPIstruct coroutine; struct coroutine *coroutine_create(void (*func)(void *), void *arg); void coroutine_delete(struct coroutine *co); struct coroutine *coroutine_...

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 
#include 
#include 
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;
}

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux下glibc库文件锁:协同锁(advisory lock)和强制锁(mandatory lock)
  • 协同工作流系统 Bonita
  • 协同办公套件 Zimbra
  • 浙ICP备11055608号-3 iis7站长之家
  • 协同教育游戏 CIVITAS
  • 协同办公套件 Rendezvous Groupware Suite
  • 企业协同办公 MiniOA
  • 群组协同工作软件 OpenGroupware
  • 关于git多人协同开发问题
  • 开源协同编辑工具 newspad
  • 协同进程
  • 协同办公系统 然之
  • 协同文本编辑器 Netpad
  • tomcat和apache不能协同工作
  • 企业协同系统 Jfinal框架开发 JECP
  • 永久免费 协同管理系统(CC OA CRM PB HR DL)
  • Web版协同建模工具 Orchestra Designer
  • C#实现协同过滤算法的实例代码


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3