gpt4 book ai didi

c++ - shared mutex 和 mutex 之间的区别(为什么两者都存在于 C++ 11 中)?

转载 作者:太空狗 更新时间:2023-10-29 23:43:36 27 4
gpt4 key购买 nike

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

最佳答案

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

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

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

编辑:旁注:

Why readers need a lock?

这是为了防止写入者在读取发生时获取锁。此外,它还可以防止新读者获取锁(如果它仍处于独占状态)。

关于c++ - shared mutex 和 mutex 之间的区别(为什么两者都存在于 C++ 11 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46049803/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com