c++ - 是否可以鼓励线程排队而不强迫它?
问题描述
我有一个多个线程正在加载的单个原子变量,它们对其执行一些本地计算,然后在其上调用原子的 fetch_and。他们检查他们是否能够在另一个线程之前进行更改,如果没有,则使用从 fetch_and 返回的更新值重复
工作速度比锁定版本快得多。但是,如果我可以鼓励多个线程对齐并且在 fetch_and 完成而不强制它完成之前不加载原子序数,那就太好了。
这可能吗?认为它可能正在使用一两个内存围栏?
解决方案
毫无意义。如果两个线程不尝试同时执行此操作,它们将取得完美的进展。如果两个线程确实尝试同时执行此操作,则其中一个线程将不得不以某种方式等待。其他线程等待的方式对性能没有影响。
如果每个线程在访问原子变量之间需要大约相同的时间,它们会自然地排成一行,因为它们会一次通过第一个这样的访问。如果线程需要不同的时间,那么排列它们的尝试不可能成功。防止两个线程同时到达的唯一方法是减慢其中一个线程的速度,而它们同时到达的后果就是其中一个线程变慢了。
如果本地计算需要很长时间,以至于您的代码可能会花费大量时间进行被丢弃的计算,请切换到使用锁。
推荐阅读
- asp.net - IIS前面是ASP.NET Core Module吗?
- javascript - 如何使用 gatsby-image 添加内联图像?
- python - 搜索表单始终不显示任何结果 Python-flask
- python - 在成功标志之前的列表中查找完整短语
- python - 使用python子串multifasta文件
- php - 如何覆盖自定义警卫的 authenticated() 方法
- javascript - 如何自动将用户输入的 4 位数字格式化为最后 2 位数字
- tomcat - Tomcat 目录 /var/lib/tomcat7/common/ 是干什么用的?
- html - 春季引导程序未加载
- xamarin.forms - Data Characteristic Changed 适用于一台设备,而不适用于相同的第二台设备