45 lines
1.2 KiB
Lua
45 lines
1.2 KiB
Lua
local oo = require "loop.simple" local verbose = require "oil.verbose"
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- Fork Component
|
|
--------------------------------------------------------------------------------
|
|
|
|
Fork = oo.class{ inuse = false }
|
|
|
|
function Fork:get()
|
|
local ok = not self.inuse
|
|
if ok then self.inuse = true end
|
|
return ok
|
|
end
|
|
|
|
function Fork:release()
|
|
assert(self.inuse, "attempt to release an unused fork")
|
|
self.inuse = false
|
|
end
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- Fork Home
|
|
--------------------------------------------------------------------------------
|
|
|
|
require "adaptor"
|
|
|
|
ForkHome = oo.class(nil, Adaptor)
|
|
|
|
function ForkHome:create()
|
|
return Fork()
|
|
end
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- Exporting
|
|
--------------------------------------------------------------------------------
|
|
|
|
require "oil"
|
|
oil.main(function()
|
|
local orb = oil.init()
|
|
orb:loadidlfile("philo.idl")
|
|
oil.writeto("fork.ior",
|
|
orb:tostring(
|
|
orb:newservant(ForkHome, nil, "ForkHome")))
|
|
orb:run()
|
|
end)
|