当考虑性能作为唯一因素时,为了在多线程上下文中进行极快的添加,是使用 GCC 内置同步/原子操作添加到单个变量更好,还是添加到单个计数器更高效每个线程?
例如,如果我有 8 个线程,其中处理的项目的总数必须递增(以极高的速率),那么最好有一个变量并使用原子操作从每个线程递增它,或者有 8 个单独的变量,每个线程一个,然后在某个时间间隔聚合来自 8 个变量的数据会更好吗?
最佳答案
如果每个线程分别完成其工作然后在最后聚合它,很可能会快得多。 ADD 指令是指令集中最简单的指令之一,运行速度非常快(约 1 个时钟周期)。锁定互斥量或类似对象的开销将大于实际计算。也许更重要的是,如果不共享,计数器可以驻留在寄存器中而不是主内存中,这也明显更快。
一般来说,除非迫不得已,否则避免共享状态会更快也更容易。
关于c - 原子加法运算与多线程多变量对比(C 语言),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38385465/