共享互斥体和互斥体之间的区别(为什么两者都存在于 C++ 17 中)?

2023-12-26

网上还没有一个例子来生动地演示这一点。看到一个例子http://en.cppreference.com/w/cpp/header/shared_mutex http://en.cppreference.com/w/cpp/header/shared_mutex但 目前还不清楚。有人可以帮忙吗?


通过使用普通的互斥体,您可以保证对某种关键资源的独占访问——仅此而已。共享互斥体通过允许两个级别的访问来扩展此功能:共享和独占,如下所示:

  • 独占访问可防止任何其他线程获取互斥体,就像普通互斥体一样。另一个线程尝试获取共享或独占访问权限并不重要。
  • 共享访问允许多个线程获取互斥体,但是all其中仅在共享模式下。在所有先前的共享持有者都返回互斥体之前,不会授予独占访问权限(通常,只要独占请求正在等待,新的共享访问就会排队等待被授予)after独占访问权)。

一个典型的场景是数据库:多个线程同时读取同一个数据并不重要。但数据库的修改至关重要 - 如果某个线程读取数据,而另一个线程正在写入,则可能会收到不一致的数据。因此,在允许写入之前,所有读取必须完成,并且新的读取必须等到写入完成。写入后,可以再次同时进行进一步的读取。

Edit:边注:

为什么读者需要锁?

这是为了防止写入者在读取时获取锁。此外,如果锁仍以独占方式持有,它会阻止新的读者获取该锁。

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

共享互斥体和互斥体之间的区别(为什么两者都存在于 C++ 17 中)? 的相关文章

  • Directory.Delete 之后 Directory.Exists 有时返回 true ?

    我有非常奇怪的行为 我有 Directory Delete tempFolder true if Directory Exists tempFolder 有时 Directory Exists 返回 true 为什么 可能是资源管理器打开了
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • ClickOnce 应用程序错误:部署和应用程序没有匹配的安全区域

    我在 IE 中使用 FireFox 和 Chrome 的 ClickOnce 应用程序时遇到问题 它工作正常 异常的详细信息是 PLATFORM VERSION INFO Windows 6 1 7600 0 Win32NT Common
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • 为什么 Google 测试会出现段错误?

    我是 Google Test 的新手 正在尝试提供的示例 我的问题是 当我引入失败并设置GTEST BREAK ON FAILURE 1 或使用命令行选项 GTest 将出现段错误 我正在考虑这个例子 https code google c
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 如何检测表单的任何控件的变化?

    如何检测 C 中表单的任何控件的更改 由于我在一个表单上有许多控件 并且如果表单中的任何控件值发生更改 我需要禁用按钮 我正在寻找一些内置函数 事件处理程序 属性 并且不想为此创建自定义函数 不 我不知道任何时候都会触发任何事件any控制表
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • Azure 辅助角色“请求输入之一超出范围”的内部异常。

    我在辅助角色中调用 CloudTableClient CreateTableIfNotExist 方法 但收到一个异常 其中包含 请求输入之一超出范围 的内部异常 我做了一些研究 发现这是由于将表命名为非法表名引起的 但是 我尝试为我的表命
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • Cmake 链接共享库:包含库中的头文件时“没有这样的文件或目录”

    我正在学习使用 CMake 构建库 构建库的代码结构如下 include Test hpp ITest hpp interface src Test cpp ITest cpp 在 CMakeLists txt 中 我用来构建库的句子是 f
  • 使用 %d 打印 unsigned long long

    为什么我打印以下内容时得到 1 unsigned long long int largestIntegerInC 18446744073709551615LL printf largestIntegerInC d n largestInte
  • C++ 函数重载类似转换

    我收到一个错误 指出两个重载具有相似的转换 我尝试了太多的事情 但没有任何帮助 这是那段代码 CString GetInput int numberOfInput BOOL clearBuffer FALSE UINT timeout IN
  • 不同类型指针之间的减法[重复]

    这个问题在这里已经有答案了 我试图找到两个变量之间的内存距离 具体来说 我需要找到 char 数组和 int 之间的距离 char data 5 int a 0 printf p n p n data 5 a long int distan
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 使用 .NET Process.Start 运行时挂起进程 - 出了什么问题?

    我在 svn exe 周围编写了一个快速而肮脏的包装器来检索一些内容并对其执行某些操作 但对于某些输入 它偶尔会重复挂起并且无法完成 例如 一个调用是 svn list svn list http myserver 84 svn Docum
  • 如何从 ODBC 连接获取可用表的列表?

    在 Excel 中 我可以转到 数据 gt 导入外部数据 gt 导入数据 然后选择要使用的数据源 然后在提供登录信息后 它会给我一个表格列表 我想知道如何使用 C 以编程方式获取该列表 您正在查询什么类型的数据源 SQL 服务器 使用权 看
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List

随机推荐

  • 跟踪被忽略目录中的文件

    前段时间我设置了我的 gitignore文件至not跟踪文件夹my folder with my folder 现在我只想跟踪所述文件夹内的给定文件 名为my file md 制作完成后 gitignore看起来像这样 my folder
  • Apscheduler 正在多次执行作业

    我有一个使用 uwsgi 有 10 个工作人员 ngnix 运行的 django 应用程序 我正在使用 apscheduler 进行调度 每当我安排一项作业时 它就会被执行多次 从这些答案中ans1 https stackoverflow
  • Nancy (C#):如何获取我的帖子数据?

    我正在使用 Corona SDK 将数据发布到我的 C 服务器 headers Content Type application x www form urlencoded headers Accept Language en US loc
  • Apache Beam 数据流中的外部 API 调用

    我有一个用例 我读取存储在谷歌云存储中的换行 json 元素并开始处理每个 json 在处理每个 json 时 我必须调用外部 API 来进行重复数据删除 无论该 json 元素之前是否被发现 我正在做一个ParDo with a DoFn
  • 用于加载 JQuery UI 和其他 JQuery 包的 Require.js Shim

    我正在尝试使用填充程序加载 JQuery Ui 但是当我尝试加载 JQueryUi 时 即使我知道路径是正确的 JQueryUi 仍然会超时 require config paths jQuery libs jquery wrapper j
  • 使用 IPV6 连接到 Google Cloud SQL

    我一直在尝试使用 Google 提供的 IPV6 地址连接到我的 google cloud sql 数据库 mysql 但没有成功 mysql h 0 0 0 0 0 aaaa aaaa aaaa u admin p 客户端提示输入密码 但
  • YouTube 视频下载地址

    我写了一个程序 获取 YouTube 视频 URL 并下载它今天我做了这个 1 从 get video info video id ID 获取视频 token 例如 http www youtube com get video info v
  • 在node中将ogg文件转换为mp3文件

    有人知道如何在节点中将 ogg 文件转换为 mp3 文件吗 一些免费的库或片段可以实现这一目标 安装fluent ffmpeg and ffmpeg installer ffmpeg使用 npm 使用这些命令进行安装 npm 我 ffmpe
  • 为移动设备禁用 Skrollr (<767px)

    首先要感谢 prinzhorn 提供了如此令人惊叹且强大的库 我的问题 我已经在我的网站标题中实现了 Skrollr 视差背景 但我想在移动设备 尤其是 iPhone 等 上查看时禁用此功能 最大宽度 767px 我想知道最好的方法是什么
  • MySQL WHERE NOT IN 非常慢

    下面是存储过程中的 SQL 语句 为简洁起见被截断 SELECT FROM item a WHERE a orderId NOT IN SELECT orderId FROM table excluded item 这个语句需要30秒左右
  • 如何判断两个类模板是否相同

    假设我有一个具有两个模板模板参数的函数 例如 template
  • 将本地化资源 .DLL 嵌入到 C# 中的可执行文件中?

    我想让我的程序多语言化 我已经通过表单的本地化和语言属性成功地使程序成为多语言的 它制作了一些 resx 文件 然后我从 resx 文件中删除了不需要的文件 例如图像 它们在所有语言中都是相同的 等 问题是 例如 它还生成一个名为 en 的
  • gSOAP:如何在soap标头中传递信息

    我希望在 SOAP 标头中发送一些信息 例如身份验证令牌 我正在使用 gSOAP c Linux 请大家帮我看看如何通过 My SOAP ENV Header好像 SOAP Header struct SOAP ENV Header str
  • Python 中的按键排序字典

    我正在寻找有序关联数组 即有序字典 的可靠实现 我想要按键排序 而不是按插入顺序 更准确地说 我正在寻找一种节省空间的 int to float 或另一个用例的 string to float 映射结构的实现 其中 有序迭代是 O n 随机
  • Swagger UI 忽略 x-tokenName 扩展名

    我在 net core 2 1 应用程序中使用 Swashbuckle v5 0 0 来生成我的 api 文档 我添加了这个安全定义 cfg AddSecurityDefinition oauth2 new OpenApiSecurityS
  • docker-compose.yml 与 docker-stack.yml 有什么区别?

    我是新的 docker 用户 在不同的手册中 我通常找到 docker compose yml 文件来描述 docker 作业 但在 docker 站点上为此目标使用了 docker stack yml 文件 有什么区别 docker co
  • Android:如何在连续移动时使用 GPS 查找总距离?

    这是我的代码 请告诉我 y 它无法计算距离 在此代码中res是一个长变量 应该存储所经过的总距离 该代码应该在纬度和经度发生变化时立即根据 GPS 计算距离 String serviceString Context LOCATION SER
  • 将 .ipa 上传到 iTunes Connect 时,iTunes Store 操作失败错误:122 (51)

    我在上传存档文件时收到此错误 我尝试了很多事情 但不知道发生了什么 网上也没有类似的问题 错误是 Destination Disk quota exceeded 5 iTunes Store Operation Failed error 1
  • Router.use() 需要中间件函数但未定义

    我正在尝试设置我的节点服务器 REST api 为此我有几个不同的文件 Division model js module exports function express sequelize var router express Route
  • 共享互斥体和互斥体之间的区别(为什么两者都存在于 C++ 17 中)?

    网上还没有一个例子来生动地演示这一点 看到一个例子http en cppreference com w cpp header shared mutex http en cppreference com w cpp header shared