Bagikan melalui


Peringatan C26115

Gagal melepaskan kunci 'kunci' dalam fungsi 'func'.

Komentar

Penegakan kunci yang dicakup secara sintetis memperoleh dan mengunci pasangan rilis dalam program C/C++ tidak dilakukan oleh bahasa. Fungsi dapat menimbulkan efek samping penguncian dengan membuat modifikasi yang dapat diamati pada status konkurensi. Misalnya, fungsi pembungkus kunci menaikkan jumlah akuisisi kunci, atau jumlah kunci, untuk kunci tertentu.

Anda dapat membuat anotasi fungsi yang memiliki efek samping dari kunci memperoleh atau mengunci pelepasan dengan menggunakan _Acquires_lock_ atau _Releases_lock_, masing-masing. Tanpa anotasi seperti itu, fungsi diharapkan tidak mengubah jumlah kunci apa pun setelah kembali. Jika akuisisi dan rilis tidak seimbang, mereka dianggap yatim piatu. Peringatan C26115 dikeluarkan ketika fungsi memperkenalkan kunci tanpa intim.

Contoh

Contoh berikut menghasilkan peringatan C26115 karena ada kunci yatim piatu dalam fungsi yang tidak dianotasi dengan _Acquires_lock_.

typedef struct _DATA
{
    CRITICAL_SECTION cs;
} DATA;

void FailToReleaseLock(int flag, DATA* p)
{
    EnterCriticalSection(&p->cs);

    if (flag)
        return; // Warning C26115

    LeaveCriticalSection(&p->cs);
}