Single Server Resource
Use cimba.Resource when a process must acquire exclusive access before
continuing.
import cimba
def job(model):
arrived = cimba.time()
model["server"].acquire()
try:
model["waits"].add(cimba.time() - arrived)
cimba.hold(model["service_time"])
finally:
model["server"].release()
def source(model):
for i in range(model["jobs"]):
cimba.Process(f"Job {i}", job, model).start()
cimba.hold(model["interarrival_time"])
with cimba.Simulation(seed=123) as sim:
model = {
"server": cimba.Resource("Server"),
"waits": cimba.DataSummary(),
"jobs": 5,
"interarrival_time": 1.0,
"service_time": 2.0,
}
cimba.Process("Source", source, model).start()
sim.execute()
print(model["waits"].mean)
The server resource wakes the next waiting process when the current holder releases it.