五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動(dòng)態(tài)

Lua編程示例(八):生產(chǎn)者-消費(fèi)者問題

發(fā)布日期:2022-01-31 08:54 | 文章來源:源碼中國

這個(gè)問題是比較經(jīng)典的啦,基本所有語言的多線程都會(huì)涉及到,但是沒想到Lua的這個(gè)這么復(fù)雜 抓狂
看了好長時(shí)間才算看明白,先上個(gè)邏輯圖:

開始時(shí)調(diào)用消費(fèi)者,當(dāng)消費(fèi)者需要值時(shí),再調(diào)用生產(chǎn)者生產(chǎn)值,生產(chǎn)者生產(chǎn)值后停止,直到消費(fèi)者再次請(qǐng)求。設(shè)計(jì)為消費(fèi)者驅(qū)動(dòng)的設(shè)計(jì)。
圖畫的不太好,可以先將Filter遮住,它是過濾器對(duì)兩個(gè)程序之間傳遞的信息進(jìn)行處理。去掉Filter邏輯就更清晰些了,就是兩個(gè)“線程”(其實(shí)是兩個(gè)協(xié)同程序)互相調(diào)用。resume回到y(tǒng)ield處開始,支持嵌套,返回到棧頂?shù)膟ield位置。yield是非阻塞的“線程同步”。這到有點(diǎn)像linux里的管道通信。


 function receive(prod)
 print("receive is called")
 local status,value = coroutine.resume(prod)
 return value
end
function send(x,prod)
 print("send is called")
 return coroutine.yield(x)
end
function producer()
 return coroutine.create(function ()
 print("producer is called")
 while true do
 print("producer run again")
  local x = io.read()
  send(x)
 end
 end)
end
function filter(prod)
 return coroutine.create(function ()
 for line = 1,1000 do
  print("enter fliter "..line)
  local x = receive(prod)
  print("receive in filter finished")
  x= string.format("%5d %s",line,x)
  send(x,prod)
 end
 end)
end
function consumer(prod)
 print("consumer is called")
 while true do
 print("consumer run again")
 local x = receive(prod)
 print("retrun customer")
 io.write(x,"\n")
 end
end
p = producer()
f=filter(p)
consumer(f)


運(yùn)行結(jié)果:

consumer is called
consumer run again
receive is called
enter fliter 1
receive is called
producer is called
producer run again
fsy
send is called
receive in filter finished
send is called
retrun customer
  1 fsy
consumer run again
receive is called
enter fliter 2
receive is called
producer run again
gaga
send is called
receive in filter finished
send is called
retrun customer
  2 gaga
consumer run again
receive is called
enter fliter 3
receive is called
producer run again
......

國外服務(wù)器租用

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開通

自選配置、實(shí)時(shí)開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對(duì)1客戶咨詢顧問

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部