【发布时间】:2012-06-14 05:37:49
【问题描述】:
如果我使用一个共享变量,比如说一个双精度变量,在程序执行过程中计算某种总和。无论如何,这是否容易受到不稳定操作的影响?我的意思是,是否有可能多个内核以异步方式访问该变量并导致不稳定的结果?
例如: 这是一个全局变量:
double totalTime = 0;
并且在每个核心中调用一个命令:
totalTime += elapsedTime;
最后一个操作/语句是通过取totalTime的值来执行的,把它放到CPU寄存器中,然后做加法。我可以想象多个核心会在同一时刻采用相同的值,然后添加新的 elapsedTime,然后由于延迟,存储在 totalTime 中的值将被错误的值覆盖。那可能吗?我该如何解决这个问题?
谢谢。
【问题讨论】:
标签: c++ multithreading parallel-processing openmp shared-memory