将升级锁排除在 N3568 提案之外的原因是什么

2024-04-29

我对此进行了一些谷歌搜索,但只找到了很少的信息。N3568 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3568.html#Wording包括升级锁概念的规范,但升级部件当时已在标准化过程中被拒绝,修订后的提案被接受 https://www.justsoftwaresolutions.co.uk/2013/05/(N3569)排除了它们,但包括了其他部分。

目前存在于boost::thread升级锁的实现,它们很容易使用。但我很好奇这个概念在使用之前被标准化委员会拒绝的具体原因。

问题:

  • 为什么升级锁被排除在 N3568 之外而被拒绝?
  • 使用有什么危险boost::thread实施 升级锁,有什么已知问题吗?
  • 升级锁是否会出现在标准中? 被认为存在严重缺陷?

  • 为什么升级锁被排除在 N3568 之外而被拒绝?

并发小组认为为以下任务确定单个升级线程并不实际:upgrade_mutex.

并发小组认为升级设施将使互斥体更加昂贵(在参考实现中没有)。

没有兴趣放upgrade_mutex在 C++14 中(在并发子组中)。

(以上内容摘自会议纪要)

  • 使用 boost::thread 实现升级锁有什么危险,有什么已知问题吗?

If BOOST_THREAD_PROVIDES_DEPRECATED_FEATURES_SINCE_V3_0_0被定义为,shared_mutex提供升级功能。这是一个坏主意。非常重要的是shared_mutex and upgrade_mutex出于类型安全的原因,它们具有不同的类型。需要在编译时强制执行哪个互斥体具有升级功能,因为其升级锁定状态在竞争升级锁定的其他线程中是独占的。

我没研究过boostupgrade_mutex足以知道它与 N3568 有何不同,所以我无法对其发表评论。

  • 升级锁是否会出现在标准中,或者它们是否被认为存在严重缺陷?

我不认为它们有严重缺陷。然而,它们的实际用例比shared_mutex,其实际用例比mutex。因此,大量观众不需要它们。但当你需要的时候,它就非常方便了。

它们永远不会成为标准,除非有人(更可能是一大群人)选择投入时间和金钱来实现这一目标。这个人不会是我,除非我得到一大群人的支持,他们非常希望出现在标准会议上并投票支持它。我不希望这种情况发生,因为用例非常罕见。

不幸的是,程序员无法完全自己实现这一点,因为这将涉及对unique_lock and shared_lock(三种锁类型之间的转换)。 “程序员无法实现”是将某些内容放入 std::lib 的动机之一。但“需要的不够广泛”也是将内容排除在 std::lib 之外的一个原因。最后一点需要草根运动来反驳,否则它就是事实。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将升级锁排除在 N3568 提案之外的原因是什么 的相关文章

随机推荐

  • 从 X.509 证书中提取 PEM 公钥

    我已经创建了一个包含公钥 DER 文件的证书 但我现在需要 PEM 格式的公钥用于不同的平台 目的是使用相同的公钥 我使用创建它iOS 中的 RSA 加密并使用 PHP 解密 http jslim net blog 2013 01 05 r
  • Android - NumberPicker 滚动/快速滑动更快

    如何使数字选择器滚动 快速滑动更快 目前从00分钟到59分钟需要付出很大的努力 我尝试过一些例子Android 中 Viewpager 控制器速度减慢 https stackoverflow com questions 8155257 sl
  • Spark,执行器加载/查询数据 - 性能非常低

    我的用例如下 写作RDD归档依据saveAsTable 对于 ORC 文件也是如此 每次保存都会创建新文件 因此1000 000著作给我1000 000ORC 文件 我知道每个 RDD 都会创建新的 ORC 文件 这是很自然的 但是 我不知
  • 定位区域中的点

    我有一个数据框 其中两列是点的坐标 如果该点位于特定位置 我需要用特定值填充一列 全无 该位置和标签存储在另一个 df 中 解释起来并不容易 但我希望通过一个例子就可以清楚地理解 DF1 latitude longitude LABEL 0
  • 无法创建新的远程会话。阿皮姆

    public class StartFirstJobTest AppiumDriver driver BeforeTest public void setUp throws Exception DesiredCapabilities cap
  • 将 openCV 矩阵转换为向量

    看起来很容易 毕竟我们知道 std 或 openCV 向量可以轻松转换为矩阵 如下所示 vector
  • BlazeDS 与 GraniteDS [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 pandas 中创建具有动态名称的新数据框并添加新列

    我有一个数据框 df df pd DataFrame A a 1 a B a np nan c ID 1 2 2 t pd tslib Timestamp now pd tslib Timestamp now np nan 添加了新列 df
  • 将接口转换为结构体

    type SipField interface Info id name defaultValue string length int type Field string func f Field Get string return str
  • gzipstream.copyto .net 3.5 中的替代且简单的方法

    你好 在 net 4的这段代码中我使用了gzipstream的copyto方法 System IO MemoryStream ms new System IO MemoryStream byteArray GZipStream Decomp
  • 创建 XML 文档的最佳 .net 方法

    我试图找出编写 XML 文档的最佳方法 下面是我尝试根据从 ERP 系统中提取的数据创建的简单示例 我读过有关 XMLWriter 的内容 但我想看看是否还有其他更好的方法 任何建议将不胜感激 XML 示例
  • 为什么我的 .git 文件很大?

    我不小心在 git 目录中添加并提交了一些非常大 100MB 的 PSD 文件 当这些文件位于目录中时 我对它们进行了一系列编辑 但后来意识到它们不应该在那里 并将它们从目录中删除 然后我跑了 git add all git commit
  • 从现有数组创建新结果

    如果我有一个如下所示的示例数据 我需要从结果数组中获取 FinalResult 数组 let result type Science link www educatorsector com type Sports News link www
  • 当数据库更新时,WTForms 中的选择验证不会更新

    我明白了SelectFieldWTForms 中的方法采用 can 参数choices其形式为 choices value1 display of value 1 value2 display of value 2 我需要根据对数据库的调用
  • 未定义不是对象(评估“React.PropTypes.Number”)错误

    刚刚更新自expo 21 0 0 to 22 0 0我收到此错误 这是我的 package json name APP version 0 1 0 private true devDependencies react native scri
  • 无法在内部存储中找到保存到文本文件的数据,如何在内部存储android studio中保存文件?

    我想在我的 Android 手机上创建一个文本文件并在其中写入一些文本 当我点击按钮时 它说saved to data user 0 com example savetotextfile files example txt 但我找不到这些文
  • Python“str”对象没有属性“read”

    Python 3 3 2 导入 json 和 urllib request Json link www google com orderid 100000222 link www google com orderid 100000222 l
  • 将 SSIM 损失函数与 Keras 结合使用

    我需要使用 Sewar 的 SSIM 作为损失函数 以便比较我的模型的图像 当我尝试编译模型时出现错误 我导入该函数并编译模型 如下所示 from sewar full ref import ssim model compile ssim
  • 滚动平均 pandas DataFrame 的所有值

    我有一个 pandas DataFrame 我想在滚动的基础上计算所有值的平均值 对于所有列 对于滚动窗口中的所有观察值 我有一个带循环的解决方案 但感觉效率很低 请注意 我可以有NaNs在我的数据中 因此计算总和并除以窗口的形状并不安全
  • 将升级锁排除在 N3568 提案之外的原因是什么

    我对此进行了一些谷歌搜索 但只找到了很少的信息 N3568 http www open std org jtc1 sc22 wg21 docs papers 2013 n3568 html Wording包括升级锁概念的规范 但升级部件当时