多线程问题,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 这种类型怎么能够很好的兼容呢?
...全文
772 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();
内容概要:本文详细介绍了一种基于MATLAB实现的改进前推回代法,用于高效求解低压配电网的潮流计算问题。该方法针对传统前推回代法在处理放射状或弱环状配电网络时存在的收敛性差、计算效率低等缺陷,提出了多项优化策略,包括节点分层排序、支路编号优化以及合理的电压初始值设定,从而显著提升了算法的数值稳定性与运算速度。文中系统阐述了改进算法的数学模型构建过程与核心原理,并提供了完整的MATLAB代码实现流程。通过标准算例的仿真测试,验证了该改进方法在计算精度和收敛性能方面的优越性,可为低压配电网的规划、运行状态分析、电压调控及分布式电源接入能力评估等实际工程问题提供可靠的技术支撑。; 适合人群:具备电力系统分析基础知识和MATLAB编程能力的高校研究生、从事电力系统相关研究的科研人员,以及负责配电网规划、运行与优化的工程技术人员。; 使用场景及目标:①实现低压配电网的稳态潮流计算与仿真分析,获取各节点电压和支路功率分布;②支撑含分布式光伏、储能等设备接入的配电网承载力评估与电压越限风险分析;③用于研究电压调控策略、无功补偿配置等优化问题;④作为电力系统专业课程的教学案例,帮助学生深入理解潮流计算的基本原理与数值算法的编程实现。; 阅读建议:建议读者结合文中的理论推导与提供的MATLAB代码进行上机实践,重点关注节点分层逻辑和迭代收敛判据的编程实现细节,通过调试和修改算例参数来加深理解,并可尝试将该方法拓展应用于三相不平衡潮流或动态潮流计算等更复杂的场景。

23,223

社区成员

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

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