使用pthread_mutex_unlock进行pthread_cleanup_push

时间:2013-12-21 21:40:58

标签: c pthreads mutex

我在C中有以下代码:

pthread_cleanup_push(pthread_mutex_unlock, &mutex);

然而,当我编译它时,我收到以下警告:

warning: initialization from incompatible pointer type

怎么了?看起来清理处理程序应该返回void *,而不是int。有没有办法绕过这个警告而不编写额外的包装器?

1 个答案:

答案 0 :(得分:5)

表达式pthread_mutex_unlock没有类型void (*)(void *)。你需要把它包起来:

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

并将此函数的地址传递给pthread_cleanup_push

其他人可能会建议你施展pthread_mutex_unlock,但这是不正确和不安全的。它将导致函数通过指向错误函数类型的指针调用,从而导致未定义的行为。