diff --git a/CMakeLists.txt b/CMakeLists.txt index 60b3f2b5..ad77b264 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -85,7 +85,7 @@ set(HDRS) set(PHDRS) if (TESTS) - set(PIP_SRC_CONCURRENT_TEST "src_concurrent/test") + set(PIP_SRC_CONCURRENT_TEST "lib/concurrent/test") endif() if (DEFINED ENV{QNX_HOST} OR PIP_FREERTOS) diff --git a/lib/concurrent/executor.cpp b/lib/concurrent/executor.cpp index c82bdeb6..a1c80042 100644 --- a/lib/concurrent/executor.cpp +++ b/lib/concurrent/executor.cpp @@ -64,7 +64,7 @@ void PIThreadPoolExecutor::execute(const std::function &runnable) { } -volatile bool PIThreadPoolExecutor::isShutdown() const { +bool PIThreadPoolExecutor::isShutdown() const { return isShutdown_; } diff --git a/lib/concurrent/test/ConditionVariableIntegrationTest.cpp b/lib/concurrent/test/ConditionVariableIntegrationTest.cpp index 98735e55..6a2609fa 100644 --- a/lib/concurrent/test/ConditionVariableIntegrationTest.cpp +++ b/lib/concurrent/test/ConditionVariableIntegrationTest.cpp @@ -160,7 +160,7 @@ TEST_F(ConditionVariable, DISABLED_waitFor_is_block_before_timeout) { } TEST_F(ConditionVariable, waitFor_is_unblock_when_timeout) { - volatile bool isUnblock = false; + std::atomic_bool isUnblock(false); createThread([&](){ m.lock(); variable->waitFor(m, WAIT_THREAD_TIME_MS); diff --git a/lib/concurrent/test/testutil.h b/lib/concurrent/test/testutil.h index 7f873e9d..063f6622 100644 --- a/lib/concurrent/test/testutil.h +++ b/lib/concurrent/test/testutil.h @@ -2,6 +2,7 @@ #define AWRCANFLASHER_TESTUTIL_H #include "pithread.h" +#include /** * Minimum wait thread start, switch context or another interthread communication action time. Increase it if tests @@ -16,10 +17,12 @@ PIOBJECT(TestUtil) public: double threadStartTime; PIThread* thread = new PIThread(); - volatile bool isRunning = false; + std::atomic_bool isRunning; std::function adapterFunctionDefault; - bool createThread(const std::function& fun = nullptr, PIThread* thread_ = nullptr) { + TestUtil() : isRunning(false) {} + + bool createThread(const std::function& fun = nullptr, PIThread* thread_ = nullptr) { std::function actualFun = fun == nullptr ? adapterFunctionDefault : fun; if (thread_ == nullptr) thread_ = thread; thread_->startOnce([=](void*){ diff --git a/lib/main/concurrent/executor.h b/lib/main/concurrent/executor.h index 92186653..63a6135c 100644 --- a/lib/main/concurrent/executor.h +++ b/lib/main/concurrent/executor.h @@ -21,6 +21,7 @@ #define PIP_TESTS_EXECUTOR_H #include "piblockingdequeue.h" +#include /** * @brief Thread pools address two different problems: they usually provide improved performance when executing large @@ -51,11 +52,11 @@ public: */ void shutdown(); - volatile bool isShutdown() const; + bool isShutdown() const; bool awaitTermination(int timeoutMs); private: - volatile bool isShutdown_; + std::atomic_bool isShutdown_; PIBlockingDequeue >* taskQueue; PIVector threadPool; };