From 38939ffbdf2ddffd4e7d4a283796c5cbab14e804 Mon Sep 17 00:00:00 2001 From: Finn Williams Date: Thu, 16 Apr 2020 16:57:59 +0100 Subject: IVGCVSW-4701 Make the GUIDGenerator thread safe Signed-off-by: Finn Williams Change-Id: Ide55731c51a8b77d71bfa4f3f7f0d122bb643d87 --- src/profiling/ProfilingGuidGenerator.hpp | 5 ++++- src/profiling/test/ProfilingGuidTest.cpp | 25 +++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/profiling/ProfilingGuidGenerator.hpp b/src/profiling/ProfilingGuidGenerator.hpp index a31903585c..dc6e22b10a 100644 --- a/src/profiling/ProfilingGuidGenerator.hpp +++ b/src/profiling/ProfilingGuidGenerator.hpp @@ -8,6 +8,7 @@ #include "armnn/profiling/IProfilingGuidGenerator.hpp" #include +#include namespace armnn { @@ -24,6 +25,7 @@ public: /// Return the next random Guid in the sequence inline ProfilingDynamicGuid NextGuid() override { + std::lock_guard sequencelock(m_SequenceMutex); ProfilingDynamicGuid guid(m_Sequence); m_Sequence++; if (m_Sequence >= MIN_STATIC_GUID) @@ -42,8 +44,9 @@ public: } private: - uint64_t m_Sequence; std::hash m_Hash; + uint64_t m_Sequence; + std::mutex m_SequenceMutex; }; } // namespace profiling diff --git a/src/profiling/test/ProfilingGuidTest.cpp b/src/profiling/test/ProfilingGuidTest.cpp index 5782d21cf8..b8f6b88479 100644 --- a/src/profiling/test/ProfilingGuidTest.cpp +++ b/src/profiling/test/ProfilingGuidTest.cpp @@ -12,6 +12,7 @@ #include #include +#include using namespace armnn::profiling; @@ -124,4 +125,28 @@ BOOST_AUTO_TEST_CASE(DynamicGuidGeneratorTest) } } +BOOST_AUTO_TEST_CASE (ProfilingGuidThreadTest) +{ + ProfilingGuidGenerator profilingGuidGenerator; + + auto guidGenerator = [&profilingGuidGenerator]() + { + for (int i = 0; i < 1000; ++i) + { + profilingGuidGenerator.NextGuid(); + } + }; + + std::thread t1(guidGenerator); + std::thread t2(guidGenerator); + std::thread t3(guidGenerator); + + t1.join(); + t2.join(); + t3.join(); + + uint64_t guid = profilingGuidGenerator.NextGuid(); + BOOST_CHECK(guid == 3000u); +} + BOOST_AUTO_TEST_SUITE_END() -- cgit v1.2.1