多线程问题,pthread_mutex_trylock,很简单的函数,为什么总是失败呢?请大侠指教!

jakeychen2008 2011-04-01 11:45:23

// 同步锁
void *taxiMutex = NULL;

//初始化
void *knCreateMutex()
{
pthread_mutex_t mutex;
if(0!= pthread_mutex_init(&mutex, NULL)) {
perror("pthread_mutex_init");
printf("pthread_mutex_init error\n");
return NULL;
}
else
return &mutex;
}
int knMutexLock(void *obj_)
{
if(0!=(pthread_mutex_trylock((pthread_mutex_t *)obj_)))
{
perror("pthread_mutex_trylock");
printf("pthread_mutex_trylock error\n");
return -1;
}
else return 0;
}
int main()
{
taxiMutex=knCreateMutex();//初始化
knMutexLock(taxiMutex);//加锁
}

编译时报错:knCreateMutex 返回了局部变量。
问题:void *这种无类型指针与 pthread_mutex_t 这种类型怎么能够很好的兼容呢?
...全文
715 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jakeychen2008 2011-04-02
  • 打赏
  • 举报
回复
明白了,谢谢大家。
phtread_mutex_t mutex;
void *taxiMutex=&mutex;
void * knCreateMutex(void * taxiMutex);
作为参数传递,解决了问题。
justkk 2011-04-01
  • 打赏
  • 举报
回复
void *knCreateMutex()
{
pthread_mutex_t mutex; // 这儿mutex是一个局部变量,函数返回后其空间被释放,成为无效内存
if(0!= pthread_mutex_init(&mutex, NULL)) {
...return NULL;
}
else
return &mutex;
}

试试改为static pthread_mutex_t mutex;

或者定义为全局变量。
xubin_sh 2011-04-01
  • 打赏
  • 举报
回复
楼上说的没错,你用new吧,用完没忘记delete,你定义的是局部变量,出了函数变量就失效了,所以你返回的是个无效的地址

pthread_mutex_t *mutex = new pthread_mutex_t();

23,120

社区成员

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

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