我正在嘗試使用谷歌測試/模擬來測試阻塞與異步。如何測試阻塞vs異步?
不幸的是,我很難想出一些測試來確保異步發生在第一種情況下並在第二種情況下阻塞。
有沒有一種方法可以確認std :: future的行爲方式應該如何?
CODE
#include <gtest/gtest.h>
#include <future>
static unsigned a_slow_calc()
{
sleep(1);
return 1u;
}
TEST(Test_future, Ensure_async)
{
// 1. immediately returns
std::future<unsigned> answer = std::async(a_slow_calc);
// 2. std::future::get BLOCKS until the result is ready
EXPECT_EQ(1u, answer.get());
}
+1 ty - 這是一個相當不錯的建議 - 事實上,我遵循鏈接並使用通過測試的超時工作。不幸的是,當我在測試中運行valgrind的drd時,我得到了競爭條件(這實際上是有道理的,因爲沒有線程和時鐘的保證)。 – kfmfe04