我需要在函数内部锁定std :: map和两个boost :: multimaps的操作,因为我们有线程试图访问该函数(以及映射)。
我打算使用" std :: mutex mutex_var"保护操作它们的函数内的变量。所以我有" std :: mutex mutex_var"变量。我很困惑使用" mutex_var.lock()"在函数的开头和" mutex_var.unlock()"在函数的末尾(OR)只是在函数的开头使用std :: lock_guard?
为清楚起见,所有功能都是在互斥锁上添加内容。我也理解/我们不需要保护我们尝试查询地图的所有地方(因为它只是一个读取操作)。
请让我知道更好的选择,并且,请澄清我的阅读想法是否不需要保护是正确的。
TIA
-R
答案 0 :(得分:2)
您应该(几乎)不要使用直接使用public ICommand
或std::mutex::lock()
std::mutex::try_lock()
,std::mutex::unlock()
或std::lock_guard
与您的std::unique_lock
。因为您不必编写解锁,因为它们在销毁时正在这样做。因此,即使在此期间引发了异常,您也不会忘记它。这就是所谓的RAII,这是现代C ++代码所需要的
所以mutex_var
更好
还有
我也了解/不需要保护所有试图查询地图的地方
通常,您仍然必须保护该读取操作,因为您不知道何时有人要写入。但这取决于您的设计,整个问题被称为readers-writer-problem,并且由于您似乎没有意识到,所以我认为您的设计需要锁定所有步骤。
答案 1 :(得分:0)