找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 7767|回复: 16

请教个问题~~~有关ace的锁

[复制链接]
发表于 2008-5-20 11:16:34 | 显示全部楼层 |阅读模式
请教个问题~~~有关ace的锁。
我用的是ACE_Thread_Mutex。
如果目前有多个线程调用acquire()排着队,
我把锁remove()掉,其他线程的acquire()方法都没有往下走,线程似乎挂起了,我需要个remove掉能够返回-1的。
是不是remove用得不合适,又没有让其他排队中的acquite返回错误的方法呢?
请大家指点。

[ 本帖最后由 sokiiya 于 2008-5-20 11:20 编辑 ]
 楼主| 发表于 2008-5-20 11:25:38 | 显示全部楼层
那个tryacquire()并不排队,只是返回当前是否有人锁着。
发表于 2008-5-20 11:31:17 | 显示全部楼层
remove
最终调用 pthread_mutex_destory,
这个函数里面会调用 pthread_mutex_trylock,
也就是说要先加锁,然后才摧毁锁,

你确定remove成功了么? 检查一下remove的返回值, 不出以外的话
应该是没有成功
发表于 2008-5-20 11:32:10 | 显示全部楼层
错误码应该是 EBUSY
 楼主| 发表于 2008-5-20 11:46:22 | 显示全部楼层
remove()返回的是0的。
 楼主| 发表于 2008-5-20 12:41:39 | 显示全部楼层
原帖由 okmmno1 于 2008-5-20 11:31 发表
。。。
也就是说要先加锁,然后才摧毁锁,
。。。

摧毁锁之前加锁用得不是acquire(),而是tryacquire()。tryacquire()返回-1就摧毁锁,我是这样用的,对吗?
 楼主| 发表于 2008-5-20 12:47:39 | 显示全部楼层
因为我在做一些释放工作,其优先级最高,别的线程的任务有acquire的排队的,也得被释放工作插队,然后其他那些任务不执行。
发表于 2008-5-20 13:03:14 | 显示全部楼层
tryacquire()返回-1, erron设置为EBUSY, 退出, 不会摧毁锁
发表于 2008-5-20 13:26:31 | 显示全部楼层
建议使用ACE_Gurad_xxx系列类以及相应的宏完成多线程处理锁的问题。
 楼主| 发表于 2008-5-20 13:39:46 | 显示全部楼层
我也用了guard_t.h的ACE_Condition<ACE_Thread_Mutex>
锁的时候用宏ACE_GUARD_RETURN(ACE_Thread_Mutex, test, testmutex, -1)。
销毁锁时是使用
        ACE_Guard<ACE_Thread_Mutex> test(testmutex);
        test.remove();
吗???
似乎没有用,其他线程该锁的都锁着 =,=


谢谢~~~

[ 本帖最后由 sokiiya 于 2008-5-20 14:03 编辑 ]
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-23 18:44 , Processed in 0.025401 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表