C26116
警告 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
}