gpt4 book ai didi

c++ - 为什么这会产生正确的输出?

转载 作者:搜寻专家 更新时间:2023-10-31 01:08:17 25 4
gpt4 key购买 nike

我刚刚在研究多线程/并发教程,下面的代码(我认为)应该不能正常工作,因为 5 个不同的线程在同一个对象上运行。

但它每次都打印出 500。这是如何运作的?我没有使用互斥体,因此无法防止多个线程访问相同数据...

#include <iostream>
#include <vector>
#include <thread>
using namespace std;

struct Counter {

int value;

void increment() {
value++;
}
};

int main(){

Counter counter;
counter.value = 0;

vector <thread> threads;

for (int i = 0; i < 5; i++){
threads.push_back(thread([&counter](){
for (int i = 0; i < 100; ++i){
counter.increment();
}
}));
}


for (auto& thread : threads)
thread.join();

cout << counter.value << endl;

cin.get();
return 0;
}

最佳答案

根据编译器的不同,增量 ++i 将产生一条指令,这意味着增量可能会以原子方式执行。

但是,当多个线程在没有任何形式的同步的情况下写入同一内​​存时,执行仍然会导致数据竞争,并且会导致未定义的行为。 UB 意味着几乎任何事情都可能发生,包括显示正确答案。

关于c++ - 为什么这会产生正确的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18188131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com