這與this問題的第二個答案有關。使用`atomic_flag`變量停止線程
我的測試代碼如下。我試圖啓動一個線程,然後使其停止使用std::atomic_flag
。然後線程應該輸出一些循環執行和總持續時間,然後停止。
std::atomic_flag keepRunning = ATOMIC_FLAG_INIT;
void F()
{
keepRunning.test_and_set();
long long unsigned count = 0;
const time_t start = time(nullptr);
while (keepRunning.test_and_set())
{
std::cout << '.';
++count;
}
const time_t duration = time(nullptr) - start;
std::cout << count << '\t' << duration << std::endl;
}
int main()
{
std::thread t(F);
keepRunning.clear();
t.join();
}
的問題是,該線程不會停止。
這是爲什麼?
- 編譯:G ++(Ubuntu的4.8.4-2ubuntu1〜14.04.3)4.8.4
- OS:MacOS的塞拉利昂版10.12.2主機上客戶機操作系統的Ubuntu 14.04
- 編譯標誌 - 我試着
-O0
和-O4
,它沒有任何區別。
@andrewrk - 你可以看看這個問題嗎? – HEKTO