即使值已更改,函数 SentMessage 始终输出 100。我尝试创建指针,以不同的方式传递p1,但它总是输出100。我如何在线程中读取p1?
Hero p1 = { "16x16 knight 4 v3.png", 100, 100, 3 }, p2 = { "16x16 knight 3 v3.png", 400, 100, 3 };
void SentMessage() {
while (true) {
cout << p1.positionX << endl;
}
}
int main() {
thread th1(SentMessage);
windowa.WindowOpen(p1, p2);// here i am updating p1 and p2 position
th1.join();
}
在没有保护/同步的情况下从多个线程访问数据会导致竞争条件,从而导致未定义的行为。
优化器还可以在每次迭代中优化读取
p1.positionX
的值。
解决方案是使用一些多线程同步机制来保护访问,并且在每次迭代中强制读取值。
您没有发布类/结构的定义
Hero
。p1.positionX
是例如一个简单的 int
变量,它可以被制作成 std::atomic<int>
。std::mutex
。