(路亚)为什么我的生产者-使用者 Lua 协程实验没有产生预期的资源



我创建了以下两个协程,一个生产者和一个使用者,试图学习/理解协程。

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()

输出为:

Creating coroutines
Executing coroutines
counter:    suspended
Counter:    1
printer:    suspended
counter:    suspended
Counter:    1
printer:    suspended
...
Counter:    1
printer:    suspended
Finished

我期待输出打印出数字 1 到 10。为什么没有发生这种情况,这是使用协程的正确方法吗?

程在它产生(或紧随其后)的同一点恢复,而不是在开始时。

您的printNumber代码不会更改number,因此您获得的输出并不奇怪。

要解决此问题,请使用 printNumber 中的 number=coroutine.yield()

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

最新更新