namespace kernel {
namespace actor {
-/* abstract */
+/* All the observers of Mutex transitions are very similar, so implement them all together in this class */
class MutexObserver : public SimcallObserver {
- activity::MutexImpl* const mutex_;
+ mc::Transition::Type type_;
+ activity::MutexImpl* const mutex_ = nullptr;
public:
- MutexObserver(ActorImpl* actor, activity::MutexImpl* mutex);
- virtual ~MutexObserver() = default;
- activity::MutexImpl* get_mutex() const { return mutex_; }
-};
+ MutexObserver(ActorImpl* actor, mc::Transition::Type type, activity::MutexImpl* mutex);
-class MutexTestObserver : public MutexObserver {
-public:
- MutexTestObserver(ActorImpl* actor, activity::MutexImpl* mutex);
-};
-
-class MutexLockAsyncObserver : public MutexObserver {
-public:
- MutexLockAsyncObserver(ActorImpl* actor, activity::MutexImpl* mutex);
-};
-
-class MutexLockWaitObserver : public MutexObserver {
- activity::MutexAcquisitionImplPtr synchro_;
-
-public:
- MutexLockWaitObserver(ActorImpl* actor, activity::MutexAcquisitionImplPtr synchro);
+ void serialize(std::stringstream& stream) const override;
+ activity::MutexImpl* get_mutex() const { return mutex_; }
bool is_enabled() override;
};
-class MutexUnlockObserver : public MutexObserver {
- using MutexObserver::MutexObserver;
-};
-
} // namespace actor
} // namespace kernel
} // namespace simgrid