何时使用 C++11 互斥锁、锁、unique_lock、shared_lock 等

2024-02-16

  1. 有什么区别shared_lock and shared_mutex.lock_shared()除此之外的析构函数shared_lock解锁关联的互斥体?
  2. Is a shared_mutex我可以使用的唯一互斥类shared_lock?
  3. 为什么有人想要使用lock_guard代替unique_lock?
  4. 如果我有很多线程不断锁定读取(shared_lock)一个变量,我有一个试图锁定它以进行写入的变量(unique_lock),这个写入线程会比其他线程有优先级吗?
  5. 对于#4,有可能出现死锁吗?

  1. shared_mutex.lock_shared()是一个锁定的函数调用shared_mutex在共享模式下,同时shared_lock是一个“锁类”,用于在作用域末尾锁定和自动解锁互斥体。

  2. 不,你可以使用shared_lock与任何满足的类型共享互斥体 https://en.cppreference.com/w/cpp/named_req/SharedMutex要求。

  3. 总是使用lock_guard除非你需要额外的功能unique_lock。这样你的意图就更明确了。

  4. 这不取决于shared_lock or unique_lock,但是关于什么SharedMutex您正在使用。标准未指定确切的行为。但这里有一些线索:

    • 在 Windows 上shared_lock通常会使用SRWLOCK并努力做到公平,例如会尽力平衡读者和作者。这里没有人会拥有更高的优先权。
    • 在 POSIX 系统上shared_mutex很可能会在之上实施pthread_rwlock_t并且实现通常会优先考虑读者,因为它需要支持递归读锁。
    • Boost shared_mutex力求公平,不偏袒任何一方。
  5. 符合读者喜好shared_mutex如果总是至少有一个读者持有锁,那么您的写入线程可能永远不会获取该锁。

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

何时使用 C++11 互斥锁、锁、unique_lock、shared_lock 等 的相关文章

  • 删除是如何工作的? [复制]

    这个问题在这里已经有答案了 可能的重复 C 编程 free 如何知道要释放多少 https stackoverflow com questions 1518711 c programming how does free know how m
  • 检测到堆栈崩溃

    我正在执行我的 a out 文件 执行后 程序运行一段时间 然后退出并显示消息 stack smashing detected a out terminated Backtrace lib tls i686 cmov libc so 6 f
  • Gwan C#,如何获取HTTP标头?

    我需要它来重写 url 以了解我正在处理哪个友好的 url 用于用户代理和其他东西 EDIT public class Gwan MethodImplAttribute MethodImplOptions InternalCall exte
  • 使用查询表达式对 List 进行排序

    我在使用 Linq 订购这样的结构时遇到问题 public class Person public int ID get set public List
  • 将接口转换为其具体实现对象,反之亦然?

    在 C 中 当我有一个接口和几个具体实现时 我可以将接口强制转换为具体类型 还是将具体类型强制转换为接口 这种情况下的规则是什么 Java 和 C 中都允许这两个方向 向下转型需要显式转型 如果对象类型不正确 可能会抛出异常 然而 向上转换
  • 根据对象变量搜索对象列表

    我有一个对象列表 这些对象具有三个变量 ID 名称和值 这个列表中可能有很多对象 我需要根据ID或Name找到一个对象 并更改值 例子 class objec public string Name public int UID public
  • 在 asp.net MVC 中使用活动目录进行身份验证

    我想使用活动目录对我的 asp net mvc 项目中的用户进行身份验证 在网上冲浪了几个小时后 我没有找到任何对我有用的东西 我已经看到了所有结果 但什么也没有 我尝试按照许多帖子的建议编辑我的 web config 如果有人可以帮助我提
  • 引用/指针失效到底是什么?

    我找不到任何定义指针 引用无效在标准中 我问这个问题是因为我刚刚发现 C 11 禁止字符串的写时复制 COW 据我了解 如果应用了 COW 那么p仍然是一个有效的指针并且r以下命令后的有效参考 std string s abc std st
  • Project Euler #8,我不明白我哪里出了问题[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在做项目欧拉第八题 https projecteuler net problem 8 其中我得到了这个大得离谱的数字 7316
  • 使用 GCC 生成可读的程序集?

    我想知道如何使用GCC http en wikipedia org wiki GNU Compiler Collection在我的 C 源文件中转储机器代码的助记符版本 这样我就可以看到我的代码被编译成什么 你可以使用 Java 来做到这一
  • 如何从 Rx Subscribe 回调异步函数?

    我想回调 Rx 订阅中的异步函数 例如 像那样 public class Consumer private readonly Service service new Service public ReplaySubject
  • Linux mremap 不释放旧映射?

    我需要一种方法将页面从一个虚拟地址范围复制到另一个虚拟地址范围 而无需实际复制数据 范围很大 延迟很重要 mremap 可以做到这一点 但问题是它也会删除旧的映射 由于我需要在多线程环境中执行此操作 因此我需要旧映射能够同时使用 因此稍后当
  • 如何停止无限循环?

    我正在编写一个程序 该程序将计算三角形或正方形的面积 然后提示用户是否希望计算另一个 我的代码已经运行到可以计算任一形状的面积的程度 但随后不再继续执行代码的其余部分 例如 如果选择了正方形 则计算面积 然后返回到正方形边长的提示 我假设这
  • 使用 jQuery 从 ASP.Net JSON 服务获取数据

    我正在尝试调用 Google 地图地理编码 API 从纬度 经度对中获取格式化的地址 然后将其记录到控制台 我正在尝试获取为给定位置返回的第一个 formatted address 项目 我很简单无法从 JSON 中提取该项目 我不知道为什
  • C++ 中 void(*)() 和 void(&)() 之间的区别[重复]

    这个问题在这里已经有答案了 在此示例代码中 func1是类型void int double and funky是类型void int double include
  • PyQt 中的线程和信号问题

    我在 PyQt 中的线程之间进行通信时遇到一些问题 我使用信号在两个线程 发送者和监听者 之间进行通信 发送者发送消息 期望被监听者接收 但是 没有收到任何消息 谁能建议可能出了什么问题 我确信这一定很简单 但我已经环顾了几个小时但没有发现
  • 为什么以下 C 程序会出现总线错误?

    我认为这是第一个失败的 strtok 调用 好久没写C了 有点不知所措 非常感谢 include
  • INotifyPropertyChanged 和 propertyName

    我一直不确定它的含义propertyName实施时INotifyPropertyChanged 所以一般来说你实现INotifyPropertyChanged as public class Data INotifyPropertyChan
  • DataContractSerializer 事件/委托字段问题

    在我的 WPF 应用程序中 我正在使用DataContractSerializer序列化对象 我发现它无法序列化具有事件或委托声明的类型 考虑以下失败的代码 Serializable public abstract class BaseCl
  • 为什么匹配模板类上的部分类模板特化与没有模板匹配的另一个部分特化不明确?

    这个问题可能很难用标题中的句子来描述 但这里有一个最小的例子 include

随机推荐

  • 地图 V2 标记按下状态

    在 Maps V2 中 如何将标记设置为按下状态 setIcon 方法采用 BitmapDescriptor 我看不到一种传递 XML 选择器的方法 该选择器将给出按下和选择的状态 实现此目的的唯一方法是重写 OnMarkerClickLi
  • 如何在socket.io 1.0中存储客户端相关数据

    文档说 socket io 现在不支持 get set 可以存储客户端相关数据吗 io sockets on connection function client client on data function somedata clien
  • 限制对 Application Load Balancer 的访问的最佳方法是什么?

    理想情况下 我想锁定我的 ALB 以便只能通过 API 网关访问它 我研究了是否可以将 API 网关与入站规则关联 但是 我发现 API 网关无法与 IP 地址或安全组关联 我还研究了面向内部的 ALB 但我无法让这些工作 因为 VPC 链
  • HBase 扫描时出现 java.lang.NoClassDefFoundError

    我正在尝试运行 MapReduce 作业来扫描 HBase 表 目前我使用的是Cloudera 4 4附带的HBase 0 94 6版本 在我的程序中的某个时刻 我使用 Scan 并使用以下命令正确导入它 import org apache
  • EHCache如何实现其事务?

    这个问题可能听起来很模糊 但我试图理解 EHCache 事务能力的一般概念 假设我将 EHCache 配置为内存缓存 并且还将其配置为缓存MyObject EHCache是 否克隆实例MyObject我正在检索这是否是作为交易的一部分完成的
  • “飞行模式”打开时SIM状态的值是多少

    我想知道返回的SIM状态值是多少TelephonyManager getSimState http developer android com reference android telephony TelephonyManager htm
  • Jersey/JAXB:对 HTTP POST 和 GET 使用相同的 POJO,但在 JSON 响应中仅返回 GET 属性的子集。

    这似乎是另一件相当简单的事情 但我再次为如何做到这一点而苦苦挣扎 我有一个带有 Jersey JAXB 注释的 POJO 该注释具有与其关联的 HTTP POST 和 GET 方法 在 POJO 上执行 POST 时 请求正文以 JSON
  • 如何使用 NetBeans GUI Builder 包含自定义面板?

    我编写了一个扩展 JPanel 的类 是否可以在 NetBeans GUI Builder 中使用它并让它在所有自动代码生成过程中幸存下来 我已经使用 GUI 构建器中的自定义代码选项将对象实例化为新类 但似乎无法从 JPanel 更改声明
  • 单击按钮时 UITextField 不会结束编辑(委托 textFieldDidEndEditing )

    我有两个textFields在屏幕上和一个Submit button 用户在第一个文本字段中输入详细信息 然后在第二个文本字段中输入详细信息 我的要求是结束编辑Submit button单击并打印这些中的用户输入textFields 我在打
  • OkHttp3 返回超时异常

    我使用 okhttp3 作为网络库 使用 Node mongo 作为后端服务 有时 当我的应用程序启动时 它会显示超时异常 当我关闭应用程序并再次启动它时 它会从服务器获取数据 没有错误应用程序 但我想知道为什么显示超时异常 下面是我在列表
  • ggplot2 中的旋转和间距轴标签

    我有一个图 其中 x 轴是一个标签很长的因子 虽然可能不是理想的可视化 但现在我想简单地将这些标签旋转为垂直 我已经用下面的代码解决了这部分问题 但正如您所看到的 标签并不完全可见 data diamonds diamonds cut lt
  • 如何从控制台访问 Ember 数据存储?

    在 Ember 2 中 有谁知道如何获取对 Ember Store 的引用 以便对 javascript 控制台中的模型映射进行故障排除 本来可以通过App container lookup在 Ember 1 中 但这已经不存在了 而且很难
  • PhantomJS 和 iFrame

    我正在使用 phantomjs 1 5 和casperjs http casperjs org 用于我的功能测试 casper require casper create loadImages false casper start http
  • 在 Objective-C 中定义协议类别?

    在 Objective C 中 我可以使用类别向现有类添加方法 例如 interface NSString MyCategory BOOL startsWith NSString prefix end 是否也可以使用协议来做到这一点 即如果
  • ctorParameters.map 不是 angular2-mdl 中的函数

    我正在尝试将 Angular2 mdl 与 Angular CLI 一起使用 我导入了MdlModule在 app module ts 中 当我尝试使用时
  • 在 Go (Golang) 中枚举注册表值

    我正在尝试使用 Go 枚举 Windows 注册表中的值列表 但遇到了一些麻烦 我尝试了两种方法 使用 Go 提供的syscall要调用的库RegEnumValue 也使用 lxn 的 Windows API 包装器 https githu
  • NSDateFormatter 谜题!这是新的山狮虫吗?

    我相信我可能发现了一个错误NSDateFormatter 我不确定这是否本地化为在系统偏好设置中指定了巴西时区 完整的项目在这里 http www idanfe com dl nsDateFormatterPuzzle zip http w
  • 文本描边(-webkit-text-lines)css问题

    我正在使用 NextJs 和 TailwindCSS 开发一个个人项目 完成项目后 我使用私人导航器来查看进度 但似乎笔画没有按应有的方式工作 我在除 Chrome 之外的所有浏览器中都遇到了这种情况 这是我得到的 这是所需的行为 Code
  • ASP.NET 开发服务器未更新对标记/代码的更改

    我最近一直在开发 ASP NET 开发服务器 在一个 MVC 项目中 我发现它在如何服务于我对代码所做的更改方面不一致 例如 我对 C 在开发环境中运行 HTML CSS JS 并运行页面 更改会出现在屏幕上 但是如果我再次编辑 HTML
  • 何时使用 C++11 互斥锁、锁、unique_lock、shared_lock 等

    有什么区别shared lock and shared mutex lock shared 除此之外的析构函数shared lock解锁关联的互斥体 Is a shared mutex我可以使用的唯一互斥类shared lock 为什么有人