#include "armnn/profiling/IProfilingGuidGenerator.hpp"
#include <functional>
+#include <mutex>
namespace armnn
{
/// Return the next random Guid in the sequence
inline ProfilingDynamicGuid NextGuid() override
{
+ std::lock_guard<std::mutex> sequencelock(m_SequenceMutex);
ProfilingDynamicGuid guid(m_Sequence);
m_Sequence++;
if (m_Sequence >= MIN_STATIC_GUID)
}
private:
- uint64_t m_Sequence;
std::hash<std::string> m_Hash;
+ uint64_t m_Sequence;
+ std::mutex m_SequenceMutex;
};
} // namespace profiling
#include <boost/test/unit_test.hpp>
#include <boost/format.hpp>
+#include <thread>
using namespace armnn::profiling;
}
}
+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()