#include "simgrid/s4u/Semaphore.hpp"
#include "src/kernel/actor/ActorImpl.hpp"
+#include "src/kernel/actor/SynchroObserver.hpp"
-namespace simgrid {
-namespace kernel {
-namespace activity {
+namespace simgrid::kernel::activity {
/** Semaphore Acquisition: the act / process of acquiring the semaphore.
*
bool granted_ = false;
friend SemaphoreImpl;
+ friend actor::SemaphoreAcquisitionObserver;
public:
SemAcquisitionImpl(actor::ActorImpl* issuer, SemaphoreImpl* sem) : issuer_(issuer), semaphore_(sem) {}
void wait_for(actor::ActorImpl* issuer, double timeout) override;
void post() override;
void finish() override;
+ void cancel() override;
void set_exception(actor::ActorImpl* issuer) override
{ /* nothing to do */
}
unsigned int value_;
std::deque<SemAcquisitionImplPtr> ongoing_acquisitions_;
+ static unsigned next_id_;
+ unsigned id_ = next_id_++;
+
friend SemAcquisitionImpl;
+ friend actor::SemaphoreObserver;
public:
explicit SemaphoreImpl(unsigned int value) : piface_(this), value_(value){};
delete sem;
}
}
-
+ unsigned get_id() const { return id_; }
s4u::Semaphore& sem() { return piface_; }
};
-} // namespace activity
-} // namespace kernel
-} // namespace simgrid
+} // namespace simgrid::kernel::activity
#endif /* SIMGRID_KERNEL_ACTIVITY_SEMAPHOREIMPL_HPP */