簡體   English   中英

如果塊阻止std :: lock_guard的范圍

[英]scope of std::lock_guard inside if block

目前正在研究std::mutex並希望得到一些幫助。 如果我的代碼看起來像 -

....
if(returnBoolValue())
{
    std::lock_guard<std::mutex> lock(mutex_var);
    ....
    ....
}
....

std::lock_guard守護函數返回值如果條件? 即。 returnBoolValue()

如果可能的話,我應該如何改進它以便功能調用也在防護內部?


目前,如果不添加另一個范圍,就不可能做到這一點(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聲明時。 它釋放(解鎖)互斥當保護遭到破壞,這恰好當控制流過}終止然后塊(或者通過流過那里自然,或“強制的”通過returnthrow ,或跳轉語句)。

這當然也說明了如何通過互斥擴展“受保護”范圍:擴展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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM