建議使用 Visual Studio 2017

C26116

 

發行︰ 2016年7月

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

警告 C26116: 無法取得或保存在 <func>的 <lock> 。

在語法上是範圍鎖定的執行緒 取得 和鎖定 C/C++ 程式的發行沒有由語言執行。 函式可以藉由對並行狀態的可預見值的變更產生新的鎖定副作用。 例如,鎖定包裝函式將鎖定獲取數目或鎖定計數遞增,並使用指定的鎖定。您可以使用 _Acquires_lock__Requires_lock_held,您也可以分別註記從鎖定的副作用 (Side Effect) 取得或鎖定版本的函式。 如果沒有這種附註,在這種情況下,在它傳回之後,函式預期不會變更任何鎖定計數。 如果取得與釋放不平痕,它們會變為孤立。 警告的 C26116 發行,當函式附註與 _Acquires_lock_時,不過,它不會取得鎖定,或,當函式加註 _Requires_lock_held 並釋放鎖定。

下列範例會產生警告 C26116,因為函式 DoesNotLock 附註與 _Acquires_lock_ ,但不會取得它。 因為它標註 _Requires_lock_held ,且不會保留,函式 DoesNotHoldLock 產生警告。

  
typedef struct _DATA   
{  
    CRITICAL_SECTION cs;  
} DATA;  
  
_Acquires_lock_(p->cs) void DoesLock(DATA* p)   
{  
    EnterCriticalSection(&p->cs); // OK  
}  
  
_Acquires_lock_(p->cs) void DoesNotLock(DATA* p)   
{  
    // Warning C26116  
}  
  
_Requires_lock_held_(p->cs) void DoesNotHoldLock(DATA* p)   
{  
    LeaveCriticalSection(&p->cs); // Warning C26116  
}  
  

C26115

顯示: