线程锁函数pthread_cleanup_push()编译问题,急!

duanzhh 2011-02-27 03:15:58
void * child1(void *arg)
{
pthread_cleanup_push(pthread_mutex_unlock,&mutex); /* comment 1 */
while(1){
printf("thread 1 get running \n");
printf("thread 1 pthread_mutex_lock returns %d\n",
pthread_mutex_lock(&mutex));
pthread_cond_wait(&cond,&mutex);
printf("thread 1 condition applied\n");
pthread_mutex_unlock(&mutex);
sleep(5);
}
pthread_cleanup_pop(0); /* comment 2 */
}
如上参照网上的一段代码,在编译时,老是报:
invalid conversion from 'int (*)(pthread_mutex_t*)throw ()' to 'void (*)(void*)' 错误

看了下pthread_cleanup_push原型为:
void pthread_cleanup_push(void (*routine)(void*), void *arg)

而pthread_mutex_unlock原型为:
int pthread_mutex_unlock(pthread_mutex_t *mutex);

上述程序是在LINUX主机上编译的。

这种问题该如何解决啊,谢谢各位了!
...全文
142 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
justkk 2011-02-28
  • 打赏
  • 举报
回复
pthread_cleanup_push()的第一个参数要求是一个没有返回值的函数
而pthread_mutex_unlock是一个返回int 的函数

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧