gpt4 book ai didi

c++ - 什么更好 std::lock_guard lock(std::mutex mutex var);或 std::mutex mutex_var.lock();

转载 作者:行者123 更新时间:2023-11-28 01:57:38 33 4
gpt4 key购买 nike

我需要在一个函数内锁定一个 std::map 和两个 boost::multimaps 的操作,因为我们有线程试图访问该函数(以及映射)。

我计划使用“std::mutex mutex_var”来保护操作它们的函数内的那些变量。所以我有“std::mutex mutex_var”变量。我对在函数开头使用“mutex_var.lock()”和在函数结尾使用“mutex_var.unlock()”感到困惑(或者)只是在函数开头使用 std::lock_guard?

为了清晰起见,所有函数所做的就是在互斥锁上添加东西。我也明白/我们不需要保护我们尝试查询 map 的所有地方(因为它只是一个读取操作)。

请告诉我更好的选择,也请澄清我的阅读不需要保护的想法是否正确。

TIA

-R

最佳答案

你应该(几乎)永远不要使用 std::mutex::lock(), std::mutex::try_lock()或直接使用 std::mutex::unlock(),始终在 中使用 std::lock_guardstd::unique_lock mutex_var。因为你不用写unlock,因为他们在销毁的时候正在做。所以你不能忘记它,即使同时抛出了异常。这叫做 RAII并且是您想要的现代 C++ 代码

所以 std::lock_guard 更好

对于

I also understand/thing that we dont need to guard all the places where we try to query the map

通常你还是要守住那个读操作,因为你不知道什么时候有人要写。但这取决于你的设计,整个问题被称为 readers-writer-problem由于您似乎没有意识到这一点,我假设您的设计需要对所有步骤进行锁定。

关于c++ - 什么更好 std::lock_guard<std::mutex> lock(std::mutex mutex var);或 std::mutex mutex_var.lock();,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40603142/

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