赞 | 3 |
VIP | 0 |
好人卡 | 0 |
积分 | 4 |
经验 | 0 |
最后登录 | 2012-1-31 |
在线时间 | 0 小时 |
Lv2.观梦者
- 梦石
- 1
- 星屑
- 255
- 在线时间
- 0 小时
- 注册时间
- 2012-1-30
- 帖子
- 3
|
本帖最后由 答案 于 2012-1-30 18:07 编辑
不,并不会这样……
当我们调用fiber.resume,就告知fiber:“你可以开始运行了”,我们就把控制权交给了fiber。
当调用纤程的时候即把控制权交由纤程。纤程从上至下执行一遍,若没有Fiber.yield的时候,会执行到结尾,然后将控制权交还。如果按照你这个例子的话那么最后 a 是不会等于 b 的,当然如果加上循环的确就是50了,这和直接写语句效果是一样的
如下代码的确可以将a,b变成50- a = 0
- b = 100
- while(a != b)
- Fiber.new{a+=1}.resume
- Fiber.new{b-=1}.resume
- end
- msgbox "#{a},#{b}"
复制代码 但是这样并不可以:- a = 0
- b = 100
- Fiber.new{a+=1}.resume
- Fiber.new{b-=1}.resume
- msgbox "#{a},#{b}"
复制代码 咱个人认为把纤程作为一种扩展的闭包就好了……纯粹个人意见
纤程和线程是不一样的:- a = 0
- b = 100
- Thread.new{a += 1 while true}
- Thread.new{b -= 1 while true}
- p a,b while true
复制代码 |
|