gpt4 book ai didi

c - pthread_cleanup_push 和 pthread_mutex_unlock

转载 作者:太空宇宙 更新时间:2023-11-04 00:50:29 26 4
gpt4 key购买 nike

我在 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,但这是不正确且不安全的。它将导致通过指向错误函数类型的指针调用函数,从而导致未定义的行为。

关于c - pthread_cleanup_push 和 pthread_mutex_unlock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20723847/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com