Coroutine 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Coroutine 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
Coroutine 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
Coroutine 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
Coroutine 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 MIT
开发语言 C/C++ 查看源码 »
操作系统 Linux
软件类型 开源软件
所属分类 程序开发常用工具包
开源组织
地区 国产
提 交 者 account4de
适用人群 未知
收录时间 2014-11-08

软件简介

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;
}
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
暂无内容
发表了博客
2018/10/28 16:05

Kotlin coroutine

Kotlin coroutine 多了一个suspend关键字. 可以通过如下途径来开启一个coroutine GlobalScope.launch { delay(1000) println(Thread.currentThread().name) println("Hello") } 如果想要返回值的话,使用async. val deferred = (1..1_000_000).map { n -> GlobalScope.async { n } } Waiting for a job val job = GlobalScope.launch { // launch a new coroutine and keep a reference to its Job delay(1000L) println("World!...

0
0
发表了博客
2019/05/09 17:18

Kotlin coroutine学习

https://kotlinlang.org/docs/reference/coroutines/coroutine-context-and-dispatchers.html **Dispatchers and threads** Coroutine context includes a coroutine dispatcher(see CoroutineDispatcher) that determines what thread or threads the corresponding coroutine uses for its execution. Coroutine dispatcher can confine coroutine execution to a specific thread, dispatch it to a thread pool, or let it ...

0
0
发表了博客
2016/06/15 23:04

A Threads class with coroutine

# A Threads class with coroutine ## Introduction ### Problem description When I tried to run some functions like terrain generating. Because it need a long time to finish, so I have to face a black screen without any information appear. This is because of the mechanism of `Codea`: >when `setup()` is running, the `draw()` won't run, when `setup()` is finished, it will run the `draw()`. But these...

0
0
发表于服务端专区
2018/05/03 12:50

Kotlin Coroutine 原理解析

上一篇文章《Kotlin Coroutine 初探》向大家介绍了 Kotlin Coroutine 的由来、重要概念、用法。为了能让消除大家对 Kotlin Coroutine 的疑惑,帮助大家更好地了解和使用 Kotlin Coroutine,本篇文章将向大家介绍在 Java 平台上 Kotlin Coroutine 的实现原理。 *下面内容中的示例来源于视频《KotlinConf 2017 - Deep Dives into Coroutines on JVM》,但有所修改。* # 一、示例 我们先从一段代码示例开始,假设我们有如下一段代码...

1
1
发表了博客
2013/09/20 10:48

Coroutine,你究竟干了什么?

一 引子 使用Unity已经有一段时间了,对于Component、GameObject之类的概念也算是有所了解,而脚本方面从一开始就选定了C#,目前来看还是挺明智的:Boo太小众,而且支持有限;JS(或着说UnityScript)的话稍稍自由散漫了些,不太符合我们这些略显严谨的程序猿;相比之下,C#各方面都十分沁人心腑,使用起来还是相当舒畅的 :) 就游戏开发而言,Unity也确实为我们减轻了不少开发负担、缩短了很多开发流程,但从开发原理上来讲,...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
9 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部