X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/5ed37babb2fa9097abe82df299c0aa259ed84d5a..417ed3b671abe3a71fa4106d23d0a432084cc207:/include/simgrid/plugins/ProducerConsumer.hpp diff --git a/include/simgrid/plugins/ProducerConsumer.hpp b/include/simgrid/plugins/ProducerConsumer.hpp index c45563fa37..1ecaa1e6b1 100644 --- a/include/simgrid/plugins/ProducerConsumer.hpp +++ b/include/simgrid/plugins/ProducerConsumer.hpp @@ -28,9 +28,16 @@ namespace plugin { template class ProducerConsumer; template using ProducerConsumerPtr = boost::intrusive_ptr>; -XBT_PUBLIC_DATA unsigned long pc_id; +class ProducerConsumerId { +private: + static unsigned long pc_id; + +protected: + const std::string id = "ProducerConsumer" + std::to_string(pc_id); + ProducerConsumerId() { ++pc_id; } +}; -template class ProducerConsumer { +template class ProducerConsumer : public ProducerConsumerId { public: /** This ProducerConsumer plugin can use two different transfer modes: * - TransferMode::MAILBOX: this mode induces a s4u::Comm between the actors doing the calls to put() and get(). @@ -45,8 +52,6 @@ public: enum class TransferMode { MAILBOX = 0, QUEUE }; private: - std::string id; - /* Implementation of a Monitor to handle the data exchanges */ s4u::MutexPtr mutex_; s4u::ConditionVariablePtr can_put_; @@ -75,9 +80,6 @@ private: { xbt_assert(max_queue_size > 0, "Max queue size of 0 is not allowed"); - id = "ProducerConsumer" + std::to_string(pc_id); - pc_id++; - mutex_ = s4u::Mutex::create(); can_put_ = s4u::ConditionVariable::create(); can_get_ = s4u::ConditionVariable::create();