首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >( Lua )为什么我的生产者-消费者Lua协同试验不产生预期的再生产?

( Lua )为什么我的生产者-消费者Lua协同试验不产生预期的再生产?
EN

Stack Overflow用户
提问于 2015-04-14 12:30:34
回答 1查看 102关注 0票数 1

我创建了以下两个协同,一个生产者和一个消费者,试图学习/理解协同。

代码语言:javascript
复制
function count01to10()
  for i = 1, 10 do
    coroutine.yield(i) 
  end
end

function printNumber(number)
  while number ~= nil do
    print("Counter: ", number)
    coroutine.yield()
  end  
end


function main()
  local number = 0

  print("Creating coroutines")
  local counter = coroutine.create(count01to10)
  local printer = coroutine.create(printNumber)

  print("Executing coroutines")
  while (10 > number) do
    isSuccessuful, number = coroutine.resume(counter)
    print("counter: ", coroutine.status(counter))
    coroutine.resume(printer, number)
    print("printer: ", coroutine.status(printer))
  end

  print("Finished")
end

main()

产出如下:

代码语言:javascript
复制
Creating coroutines
Executing coroutines
counter:    suspended
Counter:    1
printer:    suspended
counter:    suspended
Counter:    1
printer:    suspended
...
Counter:    1
printer:    suspended
Finished

我希望输出输出能打印出数字1到10。为什么这不会发生,这是使用协同线的正确方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-14 12:40:52

协同线在产生(或刚开始时)的同一点恢复,而不是在开始时。

您的printNumber代码不会更改number,因此您得到的输出并不令人惊讶。

要解决这个问题,请在number=coroutine.yield()中使用printNumber

传递给resume的参数由yield返回。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29627379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档