问题描述
我有多个线程正在加载的单个原子变量,它们在其上执行一些本地计算,然后在其上原子调用fetch_and。他们检查是否能够在其他线程之前进行更改,否则,请使用从fetch_and
返回的更新值重复执行工作比锁定版本快得多。但是,如果我可以鼓励多个线程对齐并且不加载原子序数直到fetch_and完成而不强制执行,那将是很好的。
这可能吗?认为可能是使用一两个内存栅栏?
解决方法
没有意义。如果两个线程不尝试同时执行此操作,它们将取得完美的进展。如果两个线程确实尝试同时执行此操作,则其中一个将必须以某种方式等待。其他线程等待什么方式对性能没有影响。
如果每个线程在访问原子变量之间需要大约相同的时间,则它们自然会排队,因为它们将一次超过第一个此类访问。如果线程需要不同的时间量,则无法成功地将它们排列起来。阻止两个线程同时到达的唯一方法是减慢其中一个线程的速度,而同时到达两个线程的结果就是它们其中之一的速度变慢了。
如果本地计算花费的时间太长,以至于您的代码可能会花费大量时间进行被丢弃的计算,请切换到使用锁。