将升级锁排除在 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 提案之外的原因是什么 的相关文章

  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • asp.net core / kestrel中的线程管理

    我正在解决我们已迁移到 asp net core 2 0 的 asp net 应用程序的性能 可扩展性问题 我们的应用程序作为应用程序服务托管在 azure 上 并且在任何中等流量的情况下都很容易崩溃 让我困惑的一件事是如何处理多个并发请求
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • 关于 C++ 转换:参数 1 从“[some_class]”到“[some_class]&”没有已知的转换

    我正在研究 C 并且遇到了一个错误 我不知道确切的原因 我已经找到了解决方案 但仍然想知道原因 class Base public void something Base b int main Base b b something Base
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 无锁算法真的比全锁算法性能更好吗?

    陈雷蒙德 http blogs msdn com b oldnewthing 一直在做一个huge http blogs msdn com b oldnewthing archive 2011 04 15 10154245 aspx ser
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new

随机推荐

  • 从 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包括升级锁概念的规范 但升级部件当时