MoonDES 层级3:独占/容量/抢占三类资源模型。
| 符号 | 说明 |
|---|---|
| Resource | 通用资源 |
| ResourceKind | 资源类型(Exclusive / Capacity / Preemptive) |
| ResourceRequest | 资源申请请求 |
| new_exclusive(name=) | 创建独占式资源 |
| new_capacity(name=, capacity=) | 创建共享容量资源 |
| new_preemptive(name=) | 创建抢占式资源 |
| Resource::request(pid=, callback=, on_preempt=) | 请求资源 |
| Resource::release() | 释放资源 |
| Resource::is_available() | 资源是否可用 |
///|
test {
let res = new_exclusive(name="lock")
inspect(res.is_available(), content="true")
let granted = res.request(pid=1, callback=fn() { () })
inspect(granted, content="true")
inspect(res.is_available(), content="false")
res.release()
inspect(res.is_available(), content="true")
}///|
test {
let res = new_preemptive(name="channel")
let log : Array[String] = []
ignore(
res.request(pid=1, priority=5, callback=fn() { log.push("low") }, on_preempt=fn() {
log.push("preempted")
}),
)
ignore(res.request(pid=2, priority=1, callback=fn() { log.push("high") }))
assert_eq(log[1], "preempted")
assert_eq(log[2], "high")
}pub(all) struct Resource {
name : String
kind : ResourceKind
capacity : Int
in_use : Int
wait_queue : Array[ResourceRequest]
holder : ResourceRequest?
}pub(all) struct ResourceRequest {
process_id : Int
priority : Int
callback : () -> Unit
on_preempt : () -> Unit
}MoonDES - 通用离散事件仿真引擎,基于 MoonBit 构建