当前位置: 技术问答>linux和unix
多线程问题,pthread_mutex_trylock,很简单的函数,为什么总是失败呢?请大侠指教!
来源: 互联网 发布时间:2016-11-18
本文导语: // 同步锁 void *taxiMutex = NULL; //初始化 void *knCreateMutex() { pthread_mutex_t mutex; if(0!= pthread_mutex_init(&mutex, NULL)) { perror("pthread_mutex_init"); printf("pthread_mutex_init errorn"); return NULL; } ...
// 同步锁
void *taxiMutex = NULL;
//初始化
void *knCreateMutex()
{
pthread_mutex_t mutex;
if(0!= pthread_mutex_init(&mutex, NULL)) {
perror("pthread_mutex_init");
printf("pthread_mutex_init errorn");
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 errorn");
return -1;
}
else return 0;
}
int main()
{
taxiMutex=knCreateMutex();//初始化
knMutexLock(taxiMutex);//加锁
}
编译时报错:knCreateMutex 返回了局部变量。
问题:void *这种无类型指针与 pthread_mutex_t 这种类型怎么能够很好的兼容呢?
|
void *knCreateMutex()
{
pthread_mutex_t mutex; // 这儿mutex是一个局部变量,函数返回后其空间被释放,成为无效内存
if(0!= pthread_mutex_init(&mutex, NULL)) {
...return NULL;
}
else
return &mutex;
}
试试改为static pthread_mutex_t mutex;
或者定义为全局变量。
{
pthread_mutex_t mutex; // 这儿mutex是一个局部变量,函数返回后其空间被释放,成为无效内存
if(0!= pthread_mutex_init(&mutex, NULL)) {
...return NULL;
}
else
return &mutex;
}
试试改为static pthread_mutex_t mutex;
或者定义为全局变量。
|
楼上说的没错,你用new吧,用完没忘记delete,你定义的是局部变量,出了函数变量就失效了,所以你返回的是个无效的地址
pthread_mutex_t *mutex = new pthread_mutex_t();
pthread_mutex_t *mutex = new pthread_mutex_t();