我想在C++中模擬競爭條件。下面是我的代碼,我使用了Xcode作爲我的IDE競爭條件模擬崩潰在xcode
相關的代碼是這樣的:
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的值?當它崩潰是否意味着我有一個競爭條件,從而出現錯誤?
代碼在我的linux上工作正常。 – ROTOGG
@Leon Li您是否得到了> 100的結果? – adhg