我需要在函数中锁定std::map和两个boost::multimaps的操作,因为我们有线程试图访问函数(以及映射)。
我计划使用一个"std::mutex mutex_var“来保护那些操作它们的函数中的变量。所以我有"std::mutex mutex_var“变量。我混淆了函数开头使用"mutex_var.lock()“和函数末尾使用"mutex_var.unlock()”--只是在函数的开头使用std::lock_guard?
为了清晰起见,函数所做的就是在互斥体上添加内容。我也明白,我们不需要保护所有试图查询地图的地方(因为它只是一个读取操作)。
请让我知道更好的选择,也请澄清,如果我的想法不需要保护阅读是正确的。
提亚
-R
发布于 2018-08-31 11:26:14
您应该(几乎)不要直接使用 std::mutex::lock()、std::mutex::try_lock()或std::mutex::unlock(),总是在mutex_var中使用std::lock_guard或std::unique_lock。因为你不需要写解锁,因为当他们被摧毁时,他们就会这么做。所以您不能忘记这一点,即使同时抛出了异常。这被称为https://en.cppreference.com/w/cpp/language/raii,是现代C++代码所需要的。
所以std::lock_guard 是更好的
而为了
我也明白,我们不需要保护所有我们试图查询地图的地方
通常,你仍然需要保护读操作,因为你不知道什么时候有人想写。但这取决于您的设计,整个问题被称为读者-作家-问题,而且由于您似乎不知道这一点,所以我假设您的设计需要在所有步骤中锁定。
发布于 2016-11-15 07:15:55
https://stackoverflow.com/questions/40603142
复制相似问题