【发布时间】:2019-10-31 07:10:33
【问题描述】:
class test
{
void thread1()
{
int i = 0;
while(true){
for(unsigned int k = 0;k < mLD.size(); k++ )
{
mLD[k] = i++;
}
}
}
void thread2()
{
std::cout << "thread2 address : " << &mLD << "\n";
C();
}
void B()
{
std::cout << "B address : " << &mLD << "\n";
for(unsigned int k = 0;k < mLD.size(); k++ )
{
if(mLD[k]<=25)
{
}
}
}
void C()
{
B();
std::cout << "C address : " << &mLD << "\n";
double distance = mLD[0]; // <---- segmetation fault
}
std::array<double, 360> mLD;
};
计算结果--->
thread2地址:0x7e807660
B地址:0x7e807660
C 地址:0x1010160(有时为 0x7e807660)
为什么mLD的地址变了……?
即使我将 std::array 更改为std::array<std::atomic<double>360>,结果也是一样的。
【问题讨论】:
-
您没有锁定。请添加您用于线程的代码。
标签: multithreading c++11 segmentation-fault