请教个问题~~~有关ace的锁
请教个问题~~~有关ace的锁。我用的是ACE_Thread_Mutex。
如果目前有多个线程调用acquire()排着队,
我把锁remove()掉,其他线程的acquire()方法都没有往下走,线程似乎挂起了,我需要个remove掉能够返回-1的。
是不是remove用得不合适,又没有让其他排队中的acquite返回错误的方法呢?
请大家指点。
[ 本帖最后由 sokiiya 于 2008-5-20 11:20 编辑 ] 那个tryacquire()并不排队,只是返回当前是否有人锁着。 remove
最终调用 pthread_mutex_destory,
这个函数里面会调用 pthread_mutex_trylock,
也就是说要先加锁,然后才摧毁锁,
你确定remove成功了么? 检查一下remove的返回值, 不出以外的话
应该是没有成功 错误码应该是 EBUSY remove()返回的是0的。 原帖由 okmmno1 于 2008-5-20 11:31 发表 http://www.acejoy.com/bbs/images/common/back.gif
。。。
也就是说要先加锁,然后才摧毁锁,
。。。
摧毁锁之前加锁用得不是acquire(),而是tryacquire()。tryacquire()返回-1就摧毁锁,我是这样用的,对吗? 因为我在做一些释放工作,其优先级最高,别的线程的任务有acquire的排队的,也得被释放工作插队,然后其他那些任务不执行。 tryacquire()返回-1, erron设置为EBUSY, 退出, 不会摧毁锁 建议使用ACE_Gurad_xxx系列类以及相应的宏完成多线程处理锁的问题。 我也用了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 编辑 ]
页:
[1]
2