共用方式為


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
}

請參閱

參考

C26115