gpt4 book ai didi

c++ - 我应该为不同的对象使用不同的互斥量吗?

转载 作者:行者123 更新时间:2023-11-30 02:38:45 26 4
gpt4 key购买 nike

我是线程新手。如果我错了,请纠正我,互斥锁锁定了对共享数据结构的访问,以便其他线程在解锁之前无法使用它。因此,让我们考虑有 2 个或更多共享数据结构。那么,我应该为不同的数据结构创建不同的互斥对象吗?如果不是,那么 std::mutex 如何知道它应该锁定哪个对象?如果我必须同时锁定 1 个以上的对象怎么办?

最佳答案

您的问题中有几点可以更精确。也许清除它会为您解决问题。

首先,mutex 本身不会锁定对任何内容的访问。它基本上是您的代码可以锁定和解锁的东西,一些“魔法”确保一次只有一个线程可以锁定它。

如果按照惯例,您决定访问某些数据结构foo 的任何代码都将首先锁定互斥量foo_mutex,然后它就会起到保护这个数据结构的作用。

所以,话虽如此,关于您的问题:

  • 这取决于是否需要同时访问这两个数据结构(例如,是否可以只更新一个而不更新另一个,从而使系统处于不一致状态)。如果是这样,您应该使用单个互斥体锁定它们。如果没有,您可以使用两个来提高并行度。

  • 互斥量不会锁定任何东西。按照惯例,您可以决定是否可以访问 1 个、2 个或一百万个数据结构,同时持有它。

关于c++ - 我应该为不同的对象使用不同的互斥量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30481435/

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