[英]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.