当前位置: 首页 > 软件库 > 程序开发 > 常用工具包 >

Coroutine

C 协同程序
授权协议 MIT
开发语言 C/C++
所属分类 程序开发、 常用工具包
软件类型 开源软件
地区 国产
投 递 者 暨修洁
操作系统 Linux
开源组织
适用人群 未知
 软件概览

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;
}
  • 前言 ps:文章会很长 协同程序(coroutine)实在是太好用了,所以我们来学习吧!本篇文章会通过解读kotlin官方文档和android development文档来一步一步认识Kotlin 协程,没有Kotlin 基础的小伙伴建议先学习下 Kotlin 哦。 一、协程基础 本节介绍协程基本的概念。下面这些都是kotlin官方的例子,非常经典。 依赖和权限 //依赖 implementa

  • http://cloudwu.github.io/lua53doc/manual.html#2.6 Lua 支持协程,也叫 协同式多线程。 一个协程在 Lua 中代表了一段独立的执行线程。 然而,与多线程系统中的线程的区别在于, 协程仅在显式调用一个让出(yield)函数时才挂起当前的执行。 调用函数 coroutine.create 可创建一个协程。 其唯一的参数是该协程的主函数。 create

  • --[[ -- added by wsh @ 2017-12-19 -- 协程模块:对Lua协程conroutine进行扩展,使其具有Unity侧协程的特性 -- 注意: -- 1、主线程使用coroutine.start启动协程,协程启动以后,首次挂起时主线程继续往下执行,这里和Unity侧表现是一致的 -- 2、协程里可以再次使用coroutine.start启动协程,和在Unity侧协程中使

  • 1.协程概念 协程函数与普通函数的区别: (1)普通函数执行完返回,则结束。 协程函数可以运行到一半,返回并保留上下文;下次唤醒时恢复上下文,可以接着执行。 协程与多线程: (1)协程适合IO密集型程序,一个线程可以调度执行成千上万的协程,IO事件不会阻塞线程 (2)多线程适合CPU密集型场景,每个线程都负责cpu计算,cpu得到充分利用 协程与异步: (1)都是不阻塞线程的编程方式,但是协程是用

  • 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 一、定义 1. Lua的协同程序(coroutine)是什么? 参考runoob.com中对其的定义,可用线程来帮助理解。 lua协同程序与线程的共同点: 拥有独立的堆栈; 独立的局部变量; 独立的指令指针; 与其他协同程序共享全局变量和其他大部分东西; lua协同程序与线程的差异点: 一个具有多线程的程序可以同时运行几个线程,但协

  • 一、说明语言扩展 以下库扩展了编程语言 C++。 Boost.Coroutine 使得在 C++ 中使用协程成为可能——其他编程语言通常通过关键字 yield 支持。 Boost.Foreach 提供了一个基于范围的 for 循环,它是在 C++11 中添加到语言中的。 Boost.Parameter 允许您以名称/值对的形式并以任何顺序传递参数——例如,这在 Python 中是允许的。 Boos

  • tornado.gen.coroutine-协程 yield的基本概念 Future的用法 ioloop的常用接口 gen.coroutine的应用 gen.coroutine的源码 Runner类的实现 yield的基本概念 python中使用yield实现了生成器函数,同样yield.send( )方法也实现了控制权在函数间的跳转。 关于yield比较详细的介绍,可以参考这篇博文 http:/

  • 什么是协同(coroutine)? Lua 协同程序(coroutine)与线程比较类似:拥有独立的堆栈,独立的局部变量,独立的指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。 协同是非常强大的功能,但是用起来也很复杂。 线程和协同程序区别 线程与协同程序的主要区别在于,一个具有多个线程的程序可以同时运行几个线程,而协同程序却需要彼此协作的运行。 在任一指定时刻只有一个协同程序在运行,

  • C语言协程库实现说明 代码实现 1. 当前支持的功能概览 1.1 创建任意数量协程并在协程中yield #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include "gtest/gtest.h" #include "coroutine.h" #include "asyncio.h" static int g_ru

  • #include <iostream> #include <thread> #include <coroutine> #include <chrono> #include <functional> // g++-10 -std=c++2a coroutineDemo.cpp -fcoroutines -lpthread using call_back = std::function<void(

  • 原文:https://blog.panicsoftware.com/your-first-coroutine/ 原作者: Dawid Pilarski 系列文章第一篇 Coroutine Introduction 原文,译文 你的第一个协程程序 当你熟悉了协程的介绍,我认为是时候实现你的第一个协程了。本文关注理解怎样实现协程和相关实体类(特别是promise_type)。在我们开始冒险前,请确保你

 相关资料
  • 主要内容:什么是协同(coroutine)?,coroutine_test.lua 文件,实例,生产者-消费者问题,实例什么是协同(coroutine)? Lua 协同程序(coroutine)与线程比较类似:拥有独立的堆栈,独立的局部变量,独立的指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。 协同是非常强大的功能,但是用起来也很复杂。 线程和协同程序区别 线程与协同程序的主要区别在于,一个具有多个线程的程序可以同时运行几个线程,而协同程序却需要彼此协作的运行。 在任一指定时刻只有

  • 什么是协同(coroutine)? Lua 协同程序(coroutine)与线程比较类似:拥有独立的堆栈,独立的局部变量,独立的指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。 协同是非常强大的功能,但是用起来也很复杂。 线程和协同程序区别 线程与协同程序的主要区别在于,一个具有多个线程的程序可以同时运行几个线程,而协同程序却需要彼此协作的运行。 在任一指定时刻只有一个协同程序在运行,

  • 我的问题是,我正在制作一个团结的游戏,我想做的是,当我游戏中的敌人击中障碍物时,它每秒都会造成x次伤害。 “桌面”障碍物上有一个对撞机和健康脚本,以及一个用于移动和攻击敌人的碰撞体和脚本。 敌人在与书桌物体碰撞时停止,并造成伤害!但是,损害是持续的...我试过协程和调用,但所有的结果都是一样的;每次触发探测造成10点伤害,而不是每秒。 以下是脚本: 敌人的运动和攻击: 桌面健康:

  • 协同程序 当调用一个函数时,在它返回之前,会一直运行到完成。这意味着该函数中的任何动作都必须在一帧内完成;函数调用不能包含过程动画或一段时间内的事件序列。例如有这样一个任务,逐渐降低一个对象的 alpha(不透明度)值,直到它完全不可见。 void Fade() { for (float f = 1f; f >= 0; f -= 0.1f) { Color c = rend

  • 本文向大家介绍Lua中的协同程序探究,包括了Lua中的协同程序探究的使用技巧和注意事项,需要的朋友参考一下 哎,周五晚上我都还这么努力看书,真是好孩子。(小若:不想吐槽了) 其实我都准备玩游戏看电影去的了,但是这书就摆在桌子上,而且正对着我,就想着,扫两眼吧。 结果一扫就不对劲了,因为这内容有点绕,有点小混乱,如果我现在不记录下来的话,下周一可能又要重新看一次了。   好吧,今天我们来聊聊协同程序

  • ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 Hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

  • 本文向大家介绍举例详解Lua中的协同程序编程,包括了举例详解Lua中的协同程序编程的使用技巧和注意事项,需要的朋友参考一下  协同程序是协同的性质,可以把两个或更多的方法以可控制的方式执行。随着协同程序,在任何给定的时间,只有其协同程序运行之一,这在运行协同程序只能暂停其执行时,明确要求暂停。 上述定义可能看起来模糊。来告诉它更清楚,假设我们有两个方法,一个主程序方法和协同程序。当我们使用恢复功能

  • 本文向大家介绍Lua之协同程序coroutine代码实例,包括了Lua之协同程序coroutine代码实例的使用技巧和注意事项,需要的朋友参考一下 注: resume得到返回值, 如果有对应的yield在wait resume,那么yield的参数作为resum的返回值,第一个返回值表示coroutine没有错误,后面的返回值个数及其值视yeild参数而定。 如果没有yield在wait,那么返回