.. _program_listing_file_include_cmb_resourceguard.h: Program Listing for File cmb_resourceguard.h ============================================ |exhale_lsh| :ref:`Return to documentation for file ` (``include/cmb_resourceguard.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: c /* *Copyright (c) Asbjørn M. Bonvik 2025-26. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef CIMBA_CMB_RESOURCEGUARD_H #define CIMBA_CMB_RESOURCEGUARD_H #include #include #include "cmb_process.h" #include "cmi_hashheap.h" #include "cmi_slist.h" struct cmb_resourceguard { struct cmi_hashheap priority_queue; struct cmi_resourcebase *guarded_resource; struct cmi_slist_head observers; }; typedef bool (cmb_resourceguard_demand_func)(const struct cmi_resourcebase *rbp, const struct cmb_process *pp, const void *ctx); extern void cmb_resourceguard_initialize(struct cmb_resourceguard *rgp, struct cmi_resourcebase *rbp); extern void cmb_resourceguard_terminate(struct cmb_resourceguard *rgp); extern int64_t cmb_resourceguard_wait(struct cmb_resourceguard *rgp, cmb_resourceguard_demand_func *demand, const void *ctx); extern bool cmb_resourceguard_signal(struct cmb_resourceguard *rgp); extern bool cmb_resourceguard_cancel(struct cmb_resourceguard *rgp, struct cmb_process *pp); extern bool cmb_resourceguard_remove(struct cmb_resourceguard *rgp, const struct cmb_process *pp); extern void cmb_resourceguard_register(struct cmb_resourceguard *rgp, struct cmb_resourceguard *obs); extern bool cmb_resourceguard_unregister(struct cmb_resourceguard *rgp, const struct cmb_resourceguard *obs); #endif /* CIMBA_CMB_RESOURCEGUARD_H */