Jen*_*röm 2 c++ multithreading race-condition c++11
我的问题是,在阅读有关线程的内容时,如果多个踏板访问一个变量,就会出现竞争条件。我的直觉是,在这种情况下,我的代码会为“ int a”创建一个竞争条件,例如https://en.wikipedia.org/wiki/Race_condition#Example,但不会发生。我的问题是为什么会这样?
我试图在数组中单独创建多个线程,但是没有发生竞争条件。
void increment(int& a) {
++a;
}
int main()
{
int a = 0;
std::thread pool[100];
for (auto& t : pool) {
t = std::thread(increment, std::ref(a));
}
for (auto& t : pool) {
t.join();
}
printf("%d", a);
}
Run Code Online (Sandbox Code Playgroud)
我希望只有一些线程实际上会增加“ a”,并且会出现竞争条件,但是我的代码却并非如此
由于完全是偶然的机会,您只是还没有看到任何症状。
(我希望一次创建和存储这些线程比增量本身要慢得多,因此,到了下一个线程时,通常已经完成了从上一个线程开始的增量。但是您不能保证这一点。 ,这是经典的比赛条件。)
您应该/必须以a 原子方式递增,或将其与互斥锁同步。
| 归档时间: |
|
| 查看次数: |
200 次 |
| 最近记录: |