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

is it possible to encourage threads to line up without forcing it?

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

返回的更新值

运行速度比锁定版本快得多。但是,如果我可以鼓励多个线程对齐并且在 fetch_and 完成而不强制它之前不加载原子序数,那就太好了。

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

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

如果每个线程在访问原子变量之间需要大约相同的时间量,它们将自然排列,因为它们将一次超过第一个这样的访问。如果线程需要不同的时间量,则任何尝试将它们排列起来都不可能成功。防止两个线程同时到达的唯一方法是减慢其中一个的速度,而它们同时到达的结果已经是其中一个减慢了速度。

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