我正在阅读有关线程同步的内容,并开始了解好像https://en.cppreference.com/w/cpp/language/as_if。
我的问题是编译器有可能以始终打印 10 的方式重新排列/优化下面的代码,尽管 a 在主线程中被修改了。我已捕获 a 作为 const_refrence。
#include <thread>
#include <chrono>
int main()
{
int a = 10;
std::thread t([&b = const_cast<const int&>(a)]{while(true){std::cerr<<b<<std::endl; std::this_thread::sleep_for(std::chrono::seconds(1));}});
std::this_thread::sleep_for(std::chrono::seconds(5));
a =20;
t.join();
return 0;
}
目前它按预期工作。
Hiiudddddxwsjnmuhderdbwnkqslpajkhgmvbjkwls;dkjhgcfvebwkl;qdejhfvdbnmeujhcmndsewjhsn