是否可以鼓励线程在不强制的情况下进行排队?

问题描述

我有多个线程正在加载的单个原子变量,它们在其上执行一些本地计算,然后在其上原子调用fetch_and。他们检查是否能够在其他线程之前进行更改,否则,请使用从fetch_and

返回的更新值重复执行

工作比锁定版本快得多。但是,如果我可以鼓励多个线程对齐并且不加载原子序数直到fetch_and完成而不强制执行,那将是很好的。

这可能吗?认为可能是使用一两个内存栅栏?

解决方法

没有意义。如果两个线程不尝试同时执行此操作,它们将取得完美的进展。如果两个线程确实尝试同时执行此操作,则其中一个将必须以某种方式等待。其他线程等待什么方式对性能没有影响。

如果每个线程在访问原子变量之间需要大约相同的时间,则它们自然会排队,因为它们将一次超过第一个此类访问。如果线程需要不同的时间量,则无法成功地将它们排列起来。阻止两个线程同时到达的唯一方法是减慢其中一个线程的速度,而同时到达两个线程的结果就是它们其中之一的速度变慢了。

如果本地计算花费的时间太长,以至于您的代码可能会花费大量时间进行被丢弃的计算,请切换到使用锁。