X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/85b6c08c26f9da9041c315d3e9cbd4f20f8db9ff..e7dbf98c9905d9281223f93d53b0038cc6ea9a1e:/include/simgrid/s4u/Disk.hpp diff --git a/include/simgrid/s4u/Disk.hpp b/include/simgrid/s4u/Disk.hpp index 68740d13e8..46fc2f72e3 100644 --- a/include/simgrid/s4u/Disk.hpp +++ b/include/simgrid/s4u/Disk.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2019-2021. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2019-2023. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -79,14 +79,23 @@ public: Disk* set_state_profile(kernel::profile::Profile* profile); Disk* set_read_bandwidth_profile(kernel::profile::Profile* profile); Disk* set_write_bandwidth_profile(kernel::profile::Profile* profile); + /** + * @brief Set the max amount of operations (either read or write) that can take place on this disk at the same time + * + * Use -1 to set no limit. + */ + Disk* set_concurrency_limit(int limit); + int get_concurrency_limit() const; IoPtr io_init(sg_size_t size, s4u::Io::OpType type) const; IoPtr read_async(sg_size_t size) const; sg_size_t read(sg_size_t size) const; + sg_size_t read(sg_size_t size, double priority) const; IoPtr write_async(sg_size_t size) const; sg_size_t write(sg_size_t size) const; + sg_size_t write(sg_size_t size, double priority) const; /** @brief Policy for sharing the disk among activities */ enum class SharingPolicy { NONLINEAR = 1, LINEAR = 0 }; @@ -124,12 +133,23 @@ public: Disk* seal(); /* The signals */ - /** @brief Callback signal fired when a new Disk is created */ + /** @brief Add a callback fired when a new Disk is created */ + static void on_creation_cb(const std::function& cb) { on_creation.connect(cb); } + /** @brief Add a callback fired when any Disk is destroyed */ + static void on_destruction_cb(const std::function& cb) { on_destruction.connect(cb); } + /** @brief Add a callback fired when this specific Disk is destroyed */ + void on_this_destruction_cb(const std::function& cb) { on_this_destruction.connect(cb); } + /** @brief Add a callback fired when the state of any Disk changes */ + static void on_state_change_cb(const std::function& cb) { on_state_change.connect(cb); } + /** @brief Add a callback fired when the state of this specific Disk changes */ + void on_this_state_change_cb(const std::function& cb) { on_this_state_change.connect(cb); } + +private: static xbt::signal on_creation; - /** @brief Callback signal fired when a Disk is destroyed */ static xbt::signal on_destruction; - /** @brief Callback signal fired when a Disk's state changes */ + xbt::signal on_this_destruction; static xbt::signal on_state_change; + xbt::signal on_this_state_change; }; } // namespace s4u