V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liuidetmks
V2EX  ›  程序员

v 站有 C 程序员使用 protothreads 协程吗?

  •  
  •   liuidetmks · 2021-12-15 14:25:15 +08:00 · 2252 次点击
    这是一个创建于 1078 天前的主题,其中的信息可能已经有所发展或是发生改变。

    http://dunkels.com/adam/pt/

    知道这个时候惊了,世界上不乏奇思妙想的人

    14 条回复    2021-12-16 19:25:26 +08:00
    liuidetmks
        1
    liuidetmks  
    OP
       2021-12-15 15:03:29 +08:00
    看来我该问,V 站还有用 C 的人吗
    nmap
        2
    nmap  
       2021-12-15 15:13:21 +08:00
    现在还有人用这种上古时代的语言??
    fengjianxinghun
        3
    fengjianxinghun  
       2021-12-15 15:39:37 +08:00
    @nmap 我写驱动不用这个用啥。。。
    muooOOO
        4
    muooOOO  
       2021-12-15 15:51:18 +08:00
    在一个 stm32 单片机项目上用过,
    用来做高速多任务轮询,任务的执行时间能精确到 10us👍,吊打一大票 RTOS
    第一次看到将行号作为条件来进行跳转,简直了震惊我的三观
    zjsxwc
        5
    zjsxwc  
       2021-12-15 16:31:50 +08:00   ❤️ 1
    牛逼!
    大开眼界 Duff's Device
    http://dunkels.com/adam/pt/expansion.html
    liuidetmks
        6
    liuidetmks  
    OP
       2021-12-15 16:57:05 +08:00
    @zjsxwc 是啊,c 语言被一些人诟病的 switch 不能自动 break, 竟然能做这么用
    lbp0200
        8
    lbp0200  
       2021-12-15 17:24:57 +08:00
    https://en.wikipedia.org/wiki/Coroutine
    昨天还有热帖批判协程的,一脸苦大仇深的问
    ipwx
        9
    ipwx  
       2021-12-15 17:54:04 +08:00
    @liuidetmks 哦原来 C 语言的模拟 coroutine 其实是自动机 hhh

    这样来看,这种其实更类似于 on_message(message_type) {
    switch (message_type) {
    case xx: ...
    case xx: ...
    }
    }

    只不过用了语法糖自动展开了
    waruqi
        10
    waruqi  
       2021-12-15 17:59:35 +08:00 via Android
    有 我一直在用,欢迎使用 tbox 里面也有一套类似 protothreads 的 stackless conroutine 实现,接口更加简单
    Zepp
        11
    Zepp  
       2021-12-16 12:44:33 +08:00
    点进主楼的链接之后发现是我 N 年前收藏的网址,但是仍然一个字都没看过……
    bfdh
        12
    bfdh  
       2021-12-16 16:53:16 +08:00
    @liuidetmks #1 有的,一直用 C 。
    不过 protothreads 今天还是第一次听说,看了下代码,发现局部变量应该会有问题,结果果然在网站上面找到了这样一段说明
    Because protothreads do not save the stack context across a blocking call, local variables are not preserved when the protothread blocks. This means that local variables should be used with utmost care - if in doubt, do not use local variables inside a protothread!

    感觉这个是个非常大的局限,反正我很在意这个。
    bfdh
        13
    bfdh  
       2021-12-16 16:57:42 +08:00
    @fengjianxinghun #3 当然是用世界上最好的编程语言——PHP 了(手动狗头)
    zhangyichent
        14
    zhangyichent  
       2021-12-16 19:25:26 +08:00
    感觉我们以前公司的代码用的是类似的思路。。。。当时看的特别神奇。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3758 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 04:19 · PVG 12:19 · LAX 20:19 · JFK 23:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.