簡體   English   中英

帶pthread_mutex_unlock的pthread_cleanup_push

[英]pthread_cleanup_push with pthread_mutex_unlock

我在C中有以下代碼:

pthread_cleanup_push(pthread_mutex_unlock, &mutex);

但是,當我編譯它時,會收到以下警告:

warning: initialization from incompatible pointer type

怎么了? 看起來清理處理程序應該返回void *,而不是int。 有什么辦法可以在不編寫其他包裝的情況下繞過此警告?

表達式pthread_mutex_unlock類型不為void (*)(void *) 您需要包裝它:

static void cleanup_unlock_mutex(void *p)
{
    pthread_mutex_unlock(p);
}

並將此函數的地址傳遞給pthread_cleanup_push

其他人可能建議您僅強制轉換pthread_mutex_unlock ,但這是不正確且不安全的。 這將導致通過指向錯誤函數類型的指針來調用函數,從而導致未定義的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM