gpt4 book ai didi

c++ - 我是否正确使用了 Grand Central Dispatch?

转载 作者:行者123 更新时间:2023-11-28 08:17:49 24 4
gpt4 key购买 nike

我有一个通过随机样本计算游戏结果的程序;它经过多次迭代,运行该大小的循环,将结果存储在局部变量(subHits)中,然后在循环完成后,将局部变量的总计添加到类级成员变量(m_Hits)中,以机智:

void Game::LogOutcomes(long periodSize) {
int subHits[11];
for (int i = 0; i < 11; ++i) {
subHits[i] = 0;
}

for (int iters = 0; iters < periodSize; ++iters) {
// ... snipped out code calculating rankIndex by random sample.
++subHits[rankIndex];
}

for (int i = 0; i < 11; ++i) {
m_Hits[i] += subHits[i];
}
}

.. 当然,它使用局部变量作为临时存储以并行运行过程,我调用它:

dispatch_queue_t globalQ = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_apply(m_BatchSize / m_PeriodSize, globalQ, ^(size_t periodCount) {
LogBonusWager(m_PeriodSize);
});

.. 它似乎运行良好(所有结果都非常接近统计预期值)。我忍不住认为有什么不对劲,因为在用局部变量的内容更新它时,我没有在任何地方专门“锁定”类级别变量,而且我通过纯粹的好运得到了正确的结果。

有什么我想念的吗?

最佳答案

你走运了。您应该有一个专用(串行)队列来更新共享状态,或者使用 OSAtomicAddSize 添加到它。否则,您偶尔会丢失更新。

关于c++ - 我是否正确使用了 Grand Central Dispatch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7058547/

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