루코스 연습

3629 단어
생산자와 소비자 문제: 협정이 yield를 호출할 때, 현안으로 남아 있는resume에서 되돌아옵니다.간단한 협동 연습:
function receive()
    local status,value = coroutine.resume(producer)
    return status,value
end

function send(x)
    coroutine.yield(x)
end

producer = coroutine.create(
function()
    local x = 0
    while true do
        x = x+1
        if(x > 10) then
            break
        end
        send(x)
    end
end)


local status,res
repeat
 status,res = receive()
print(status, res)
until(nil == res)

출력:
>lua -e "io.stdout:setvbuf 'no'""1.lua"true 1true 2true 3true 4true 5true 6true 7true 8true 9true 10true nil>Exit code: 0
이런 모델은 소비자 구동 모델이라고 불린다.
필터 필터는 생산자와 소비자 사이에 있는 처리 함수로 데이터를 변환하는 데 사용된다.그것은 생산자이자 소비자이다. 그는 생산자에게 newvalue를 일으키도록 깨우고 변환된 값을 소비자에게 전달한다.
자신이 쓴 코드를 표시합니다. 문제가 발생했습니다.
function receive(prod)
    local value = coroutine.resume(prod)
    return value
end

function send(x)
    coroutine.yield(x)
end

x = 0
function producer()
return coroutine.create(
function()
    x = x + 1
    print(sting.format("producer:%d.
",x)) return x end) end function filter(prod) return coroutine.create( function() local x = receive(prod) x = string.format("Add:%d",x) send(x) end ) end function consumer(prod) repeat res = receive(prod) print(res) until (nil == res) end p = producer() f = filter(p) print(x) consumer(f)

저녁에 가서 어떻게 된 일인지 보자.

좋은 웹페이지 즐겨찾기