1.实现一个由A、B两个窗口同时销售100张票的系统,要求打印出每个窗口售票情况,并且每个窗口不得连续售票。
时间: 2023-04-10 22:03:27 浏览: 134
可以使用线程和锁来实现这个系统。具体实现方式如下:
```lua
local soldTickets = 0
local lock = {}
local function sellTickets(windowName, num)
for i = 1, num do
lock[windowName] = true
soldTickets = soldTickets + 1
print(windowName .. "售出了第" .. soldTickets .. "张票")
lock[windowName] = false
coroutine.yield()
end
end
local function windowA()
while soldTickets < 100 do
if not lock["A"] then
sellTickets("A", 1)
else
coroutine.yield()
end
end
end
local function windowB()
while soldTickets < 100 do
if not lock["B"] then
sellTickets("B", 1)
else
coroutine.yield()
end
end
end
local coA = coroutine.create(windowA)
local coB = coroutine.create(windowB)
while soldTickets < 100 do
coroutine.resume(coA)
coroutine.resume(coB)
end
```
这个系统使用了两个协程来模拟两个窗口,使用锁来保证每个窗口不会连续售票。每个窗口售出一张票后,会打印出售票情况,并且让出 CPU 给另一个窗口。最终,当售出的票数达到 100 张时,系统停止运行。
阅读全文