gpt4 book ai didi

c++ - 两个线程共享变量 C++

转载 作者:行者123 更新时间:2023-11-30 02:35:26 25 4
gpt4 key购买 nike

所以我有两个线程,它们共享同一个变量“counter”。我想通过仅在两个线程都达到该点后继续执行来同步我的线程。不幸的是,我进入了死锁状态,因为我的线程没有改变它的检查变量。我的方式是:

volatile int counter = 0;

Thread() {

- some calculations -

counter++;
while(counter != 2) {
std::this_thread::yield();
}
counter = 0;

- rest of the calculations -
}

我的想法是,因为我有 2 个线程,一旦它们到达那个点 - 在不同的时间 - 它们将递增计数器。如果计数器不等于 2,那么首先到达那里的线程将不得不等待,直到另一个线程增加了计数器,以便它们同步。有谁知道这里的问题出在哪里?

要添加有关该问题的更多信息,我有两个线程对一个数组执行一半的操作。一旦他们完成,我想确保他们都完成了他们的计算。一旦完成,我就可以通知打印机线程唤醒并执行打印和清除数组的操作。如果我在两个线程完成之前执行此操作,就会出现问题。

伪代码:

Thread() {

getLock()
1/2 of the calculations on array
releaseLock()

wait for both to finish - this is the issue

wake up printer thread

}

最佳答案

在这种情况下,您必须使用原子计数器。

std::atomic_uint counter = 0;

在给定的示例中,也没有迹象表明 counter 已初始化。

关于c++ - 两个线程共享变量 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33590792/

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