Unit resources
resource: true declares an indivisible resource. This model places each
Thread under a ThreadPool, then places a running Task under the specific
thread it claims.
YAML model
quent: alpha
model: unit_resource
entities:
ThreadPool:
events:
created: {}
Thread:
resource: true
events:
registered:
attributes:
pool: { scope-ref: ThreadPool }
fsms:
Task:
states:
running:
initial: true
attributes:
# ThreadUsage is generated from the Thread resource declaration.
thread: { scope-ref: Thread, data: ThreadUsage }
to: [completed]
completed: {}
The ThreadUsage record is generated automatically. It has no fields because a
unit resource is claimed as a whole.
Instrumentation API
as_entity_ref_with attaches the generated usage record to the scoped thread
reference.
// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
// SPDX-License-Identifier: Apache-2.0
#[allow(unused)]
mod instrumentation {
include!(concat!(env!("OUT_DIR"), "/unit_resource.rs"));
}
use instrumentation::{Context, Noop, Task, Thread, ThreadPool, ThreadUsage, UnitResource};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let context = Context::<UnitResource>::try_new(Noop)?;
let mut pool = context.observer::<ThreadPool>().handle();
pool.created()?;
let mut thread = context.observer::<Thread>().handle();
thread.registered(pool.as_entity_ref())?;
let _task = context
.observer::<Task>()
.handle()
.running(thread.as_entity_ref_with(ThreadUsage))
.completed();
Ok(())
}
Key point
A unit resource represents one indivisible resource instance.