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

// 同步锁

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;

或者定义为全局变量。

|

楼上说的没错,你用new吧,用完没忘记delete,你定义的是局部变量,出了函数变量就失效了,所以你返回的是个无效的地址

pthread_mutex_t *mutex = new pthread_mutex_t();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值