gpt4 book ai didi

c++ - C++的不同对象在线程中会互相干扰吗?

转载 作者:行者123 更新时间:2023-11-27 22:35:20 24 4
gpt4 key购买 nike

我正在努力学习C++原生多线程技术

我使用的编译器是遵循 C++ 14 的 g++

我使用的开发工具是CodeBlock

我创建了 10 个不同的对象并将它们用作线程的开始

#include <iostream>       // std::cout
#include <thread> // std::thread
#include <vector> // std::vector
#include "TestClass.h"

int main ()
{
std::vector<std::thread> threads;

TestClass test[10];
for (int i=1; i<=10; ++i){
threads.push_back(std::thread(&TestClass::run,std::ref(test[i-1])));
}

std::cout << "synchronizing all threads...\n";
for (auto& th : threads) th.join();

for(int i=0;i<10;i++){
std::cout << test[i].Getm_Counter() << std::endl;
}
return 0;
}

跟帖内容如下

#ifndef TESTCLASS_H
#define TESTCLASS_H


class TestClass
{
public:
TestClass();
virtual ~TestClass();

unsigned int Getm_Counter() { return m_Counter; }

void run();

protected:

private:
unsigned int m_Counter;
};

#endif // TESTCLASS_H

实现如下

#include "TestClass.h"

TestClass::TestClass()
{
//ctor
}

TestClass::~TestClass()
{
//dtor
}

void TestClass::run(){
for(int i=0;i<10;i++){
m_Counter++;
}
}

我希望每个对象的计数是 10,但结果不是这样的。为什么? enter image description here

最佳答案

您没有初始化 m_Counter(为 0 或任何其他值)。因此,在您运行结束时,可以对它的值进行任何预期(取决于它可能采用的垃圾值)

关于c++ - C++的不同对象在线程中会互相干扰吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55219099/

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