线程中的函数没有正确输出值

问题描述 投票:0回答:1

即使值已更改,函数 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();
}
c++ multithreading sfml winsock
1个回答
0
投票

在没有保护/同步的情况下从多个线程访问数据会导致竞争条件,从而导致未定义的行为。

优化器还可以在每次迭代中优化读取

 p1.positionX
的值。

解决方案是使用一些多线程同步机制来保护访问,并且在每次迭代中强制读取值。

您没有发布类/结构的定义

Hero

如果
p1.positionX
是例如一个简单的
int
变量,它可以被制作成
std::atomic<int>

但在这种情况下,最好使用
std::mutex

© www.soinside.com 2019 - 2024. All rights reserved.