[英]scope of std::lock_guard inside if block
目前正在研究std::mutex
並希望得到一些幫助。 如果我的代碼看起來像 -
....
if(returnBoolValue())
{
std::lock_guard<std::mutex> lock(mutex_var);
....
....
}
....
是std::lock_guard
守護函數返回值如果條件? 即。 returnBoolValue()
如果可能的話,我應該如何改進它以便功能調用也在防護內部?
std::mutex
- http://en.cppreference.com/w/cpp/thread/mutex std::lock_guard
- http://en.cppreference.com/w/cpp/thread/lock_guard 目前,如果不添加另一個范圍,就不可能做到這一點(C ++ 17有辦法做到這一點)
一個解決方案是
....
{
std::lock_guard<std::mutex> lock(mutex_var);
if(returnBoolValue())
{
....
....
}
}
....
C ++ 17方式:
....
if(std::lock_guard<std::mutex> lock(mutex_var); returnBoolValue())
{
....
....
}
....
鎖定保護程序在構造時鎖定互斥鎖:即,當程序的控制流程達到lock
聲明時。 它釋放(解鎖)互斥當保護遭到破壞,這恰好當控制流過}
終止然后塊(或者通過流過那里自然,或“強制的”通過return
, throw
,或跳轉語句)。
這當然也說明了如何通過互斥擴展“受保護”范圍:擴展lock
變量的范圍:
{
std::lock_guard<std::mutex> lock(mutex_var);
if(returnBoolValue())
{
....
....
}
}
請注意,我在“ lock
+ if
”對周圍添加了一個額外的塊,以確保if
-block完成后立即解鎖互斥鎖。
是std :: lock_guard守護函數返回值如果條件? 即。 returnBoolValue()
不是。關鍵部分從警衛聲明開始。 警衛是在條件之后宣布的 - 所以它沒有守衛。
我應該如何改進它
如果你需要保護條件,那么在if語句之前移動守衛。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.