c - 原子加法运算与多线程多变量对比(C 语言)

标签 c atomic

当考虑性能作为唯一因素时,为了在多线程上下文中进行极快的添加,是使用 GCC 内置同步/原子操作添加到单个变量更好,还是添加到单个计数器更高效每个线程?

例如,如果我有 8 个线程,其中处理的项目的总数必须递增(以极高的速率),那么最好有一个变量并使用原子操作从每个线程递增它,或者有 8 个单独的变量,每个线程一个,然后在某个时间间隔聚合来自 8 个变量的数据会更好吗?

最佳答案

如果每个线程分别完成其工作然后在最后聚合它,很可能会快得多。 ADD 指令是指令集中最简单的指令之一,运行速度非常快(约 1 个时钟周期)。锁定互斥量或类似对象的开销将大于实际计算。也许更重要的是,如果不共享,计数器可以驻留在寄存器中而不是主内存中,这也明显更快。

一般来说,除非迫不得已,否则避免共享状态会更快也更容易。

关于c - 原子加法运算与多线程多变量对比(C 语言),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38385465/

相关文章:

c - 在GTK3中,如何让DrawingArea响应键盘事件?

c - 为什么这个简单的 C 井字游戏程序 "forgetting"是数组中位置 [0][0] 处的值,但对其他一切都适用?

c - 将 uint8_t 传递给atomic_clr

c++ - 这个 fetch_mult 的原子实现是否正确?

c - C 循环中递增整数指针

c - 无法更新程序中的项目conf变量

java - 我在哪里可以找到 Java 库中 `native` 方法的源代码?

cakephp - 为什么 CakePHP 中的自动事务选项称为 "atomic"?

lua - 如何从 Redis 中的脚本调用脚本?

c - 一个 bash 脚本,采用 .c 文件名作为参数,然后执行该文件