先是读《Programming in Lua》第9章讲
coroutine,然后去google coroutine,找到Simon Tatham写的一篇coroutine in c,讲怎么在C语言中实现coroutine,文中先ugly地基于栈实现了一个:
java 代码
- int function(void) {
- static int i, state = 0;
- switch (state) {
- case 0: goto LABEL0;
- case 1: goto LABEL1;
- }
- LABEL0:
- for (i = 0; i < 10; i++) {
- state = 1;
- return i;
- LABEL1:;
- }
- }
这个方法简单,但是相当丑陋,你必须手工维护这些标签。然后提到了Duff's Device技巧:
cpp 代码
- switch (count % 8) {
- case 0: do { *to = *from++;
- case 7: *to = *from++;
- case 6: *to = *from++;
- case 5: *to = *from++;
- case 4: *to = *from++;
- case 3: *to = *from++;
- case 2: *to = *from++;
- case 1: *to = *from++;
- } while ((count -= 8) > 0);
- }
这段代码能编译通过吗?能的,不信你试试,这是一段用于拷贝数组的代码,我们一般拷贝数组是这样做的:
cpp 代码
- send(to, from, count)
- register short *to, *from;
- register count;
- {
- do
- *to = *from++;
- while(--count>0);
- }
如果循环的中的操作足够快,那么其实大部分时间都是浪费在判断循环条件上面的,而通过Duff's Device通过switch语句将要进行的连续循环操作的次数进行了预判(根据擦case语句的位置)然后依次执行,而不必每次都去进 行测试条件,从而加速循环。这个技巧怎么应用于实现更优雅的
coroutine呢?看代码
cpp 代码
- int function(void) {
- static int i, state = 0;
- switch (state) {
- case 0:
- for (i = 0; i < 10; i++) {
- state = 1;
- return i;
- case 1:;
- }
- }
- }
更好的方式是使用宏:
cpp 代码
- #define crBegin static int state=0; switch(state) { case 0:
- #define crReturn(i,x) do { state=i; return x; case i:; } while (0)
- #define crFinish }
- int function(void) {
- static int i;
- crBegin;
- for (i = 0; i < 10; i++)
- crReturn(1, i);
- crFinish;
- }
分享到:
相关推荐
“历史的今天”栏目虽然未在内容中具体展开,但通常会介绍历史上这一天发生的重大事件,帮助学生了解历史,增长见识。 最后的“心语音乐盒”栏目回应了一位名叫小米的六年级学生的困扰,关于如何处理异性同学表达...
美国摄影师Irving Penn在1947年的作品就证明了这一点,他的美食照片即使在今天看来仍然极具吸引力。社交媒体的兴起进一步促进了Foodtography的流行,因为明星或影响力人物发布一张诱人的食物图片,就能为餐厅带来...
今天看到了一个嵌套的ajax,算是长见识了。 不过看一眼就知道怎么回事了。 不是不会,就怕想不到。 //发送一个ajax请求,嵌套的ajax请求 'ajaxCall': function(url1, data1, url2, data2){ var returnValue = ''; ...
它能陶冶情操,增长见识,锻炼思维,培养批判性思考的能力。同学们,你们是否已经为自己规划了阅读的路径,设立了阅读的目标呢?每天,无论多忙,都应该抽出时间,静下心来,享受阅读带来的乐趣。 “世界阅读日”...
鲁迅认为阅读不仅是消遣,更是增长见识、塑造人格的过程。他鼓励孩子们阅读经典,通过讨论激发他们独立思考的能力。 其次,救助车夫的故事揭示了鲁迅对底层劳动人民的深切关怀。当看到车夫受伤,他毫不犹豫地提供...
" 鼓励人们平时多读书,积累知识,同时也要勇于实践,通过经历来增长见识。 8. "君子以见善那么迁,有过那么改。" 君子的行为准则是在认识到错误时勇于改正,见到好的行为则积极学习。 9. "十室之邑,必有忠信如丘...
这个观点是技术创新中的重要指导原则,也是在技术飞速发展的今天值得所有人深思的问题。 在思考中国传统文化变化的问题上,报告通过分析春节燃放鞭炮的减少这一现象,探讨了中国传统文化的变迁。从历史角度看,春节...
同时,我会不定期策划一些轻松的课外活动,如学术沙龙或小型聚会,让大家在紧张的学习之余得以放松,开阔视野,增长见识,同时也增强班级的凝聚力和集体荣誉感。 面对强大的竞争对手,我深知这不是一场轻松的比赛,...
司马迁生于西汉时期的夏阳,即今天的陕西韩城或山西河津,其家族有着深厚的史官传统。据《史记·太史公自序》记载,司马迁的祖先可追溯至颛顼时代的天官,家族中有在秦国担任重要军事职务的历史,如六世祖司马错在...
作者呼吁社会给予老年人更多的关爱,因为每个人都将面临老年,今天的他们就是明天的我们。 接着,实践团队深入到企业中,体验劳动者的艰辛。他们观察到工人们的辛勤工作,了解到农村劳动力通过打工获得的收入远高于...
在信息技术日益发达的今天,教育工作者需要不断提升自身的信息技术应用能力,以适应教育领域的新需求。个人信息技术应用成果主要体现在以下几个方面: 首先,积极参与校本研修活动是提升教师信息技术应用能力的重要...
在21世纪的今天,尽管科技日新月异,电子设备普及,但纸质书籍的魅力依然无法替代,它们仍然是获取知识、启迪思维的重要途径。 对于小学生来说,养成良好的阅读习惯至关重要。读书不仅可以增长见识,拓宽视野,还能...
不同地区、不同岗位的学员在一起学习,可以互相借鉴,共同进步,不仅丰富了个人的见识,也为日后的工作合作打下了基础。 总之,工商培训对于工商管理人员来说是一次宝贵的提升机会,它帮助我们理解当前的形势,掌握...
今天,我将分享一些关于读书与个人成长的观点。 首先,我们要认识到,书籍是人类智慧的结晶,是我们开拓视野、提升素养的宝贵资源。正如发言稿中提到的,书籍是攀登知识高峰的阶梯,是开启智慧大门的钥匙,也是引领...
原本以为自己已经学会了一些基础的知识就够用了,可到了实习的时候才知道原来自己要学的东西还有很多,以后自己要走的路还很长,不能只安于现状,一定要奋勇直前。 在实践的这些日子里,我们穿街走户接触各种各样的...
- 增长见识:通过阅读,我们可以了解到不同的文化、历史和社会现象,从而开阔视野,提高理解力和分析能力。 - 提升幸福感:阅读可以带来精神上的愉悦,让人在知识的海洋中找到乐趣,使我们的生活更加丰富多彩。 2...
同时,它对教育和文化交流的重视,也为今天的我们提供了借鉴,提醒我们保持开放心态,尊重并学习不同文化。 总的来说,《镜花缘》不仅仅是一部富有想象力的奇幻小说,更是一部充满智慧与深思的作品。它通过生动的...
在书中,作者描绘了一个充满未知与奇观的海底世界,通过阿龙纳斯教授的视角,读者得以见识到丰富的海洋生物、独特的地理现象以及惊险的探险经历。例如,他们遭遇冰山封路,面对生存的挑战,必须共同努力破冰脱困;还...
这篇PPT内容主要围绕一篇名为《21___我最好的老师》的文章展开,文章讲述了...这对于我们今天的教育同样具有启示意义,教育者应鼓励学生主动探索、独立思考,而学生也应该敢于挑战既有观念,以开放的心态去学习和成长。