Предупреждение C26116
Не удалось приобрести или сохранить блокировку в "func".
Принудительное применение синтаксически область заблокированных пар получения и блокировки в программах C/C++ не выполняется языком. Функция может ввести побочный эффект блокировки, сделав наблюдаемое изменение состояния параллелизма. Например, функция-оболочка блокировки увеличивает количество приобретений блокировки или число блокировок для заданной блокировки. Вы можете зафиксировать функцию, которая имеет побочный эффект от блокировки получения или блокировки выпуска с помощью _Acquires_lock_
или _Requires_lock_held
соответственно. Без таких заметок функция, как ожидается, не измените количество блокировок после возврата. Если приобретение и выпуски не сбалансированы, они считаются потерянными. Предупреждение C26116 выдается при аннотации _Acquires_lock_
функции, но она не получает блокировку или когда функция _Requires_lock_held
помечена и освобождает блокировку.
Пример
В следующем примере создается предупреждение C26116, так как функция DoesNotLock
была аннотирована, _Acquires_lock_
но не получает ее. Функция DoesNotHoldLock
создает предупреждение, так как оно аннотировано и _Requires_lock_held
не содержит его.
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
}
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по