我正在尝试在 C++ 中模拟竞争条件。下面是我的代码,我使用 xcode 作为我的 IDE
相关代码如下:
int main(int argc, const char * argv[])
{
int value=0;
int* ptr = &value;
racer r1(ptr, "John");
racer r2(ptr, "Mike");
std::thread my_thread1(r1);
std::thread my_thread2(r2);
//guard g1(my_thread1);
//guard g2(my_thread2);
my_thread1.join();
my_thread2.join();
cout<<"result:= "<<*ptr<<endl;
cout <<"end!"<<endl;
return 0;
}
对于赛车手,我有:
racer::racer(int* r, char const* name)
{
this->r=r;
this->name=name;
}
void racer::print_result()
{
cout<<this->name<<" "<<*r<<endl;
}
void racer::count_now()
{
for ( int i = 0; i < 50; i++ )
{
*r = *r + 1;
cout<<this->name<<". "<<*r<<endl;
}
}
void racer::operator()()
{
count_now();
}
所以基本上,没有比赛我的预期结果是 *ptr = 100 因为有 2 个线程在同一资源上一起运行。所以有时当我运行它时,我会得到 100,有时它会崩溃,我会收到下面的错误消息。这是为什么?换句话说,为什么我不能得到大于 100 的值?当它崩溃时是否意味着我有竞争条件并因此出现错误?