sokiiya 发表于 2008-5-20 11:16:34

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

请教个问题~~~有关ace的锁。
我用的是ACE_Thread_Mutex。
如果目前有多个线程调用acquire()排着队,
我把锁remove()掉,其他线程的acquire()方法都没有往下走,线程似乎挂起了,我需要个remove掉能够返回-1的。
是不是remove用得不合适,又没有让其他排队中的acquite返回错误的方法呢?
请大家指点。

[ 本帖最后由 sokiiya 于 2008-5-20 11:20 编辑 ]

sokiiya 发表于 2008-5-20 11:25:38

那个tryacquire()并不排队,只是返回当前是否有人锁着。

okmmno1 发表于 2008-5-20 11:31:17

remove
最终调用 pthread_mutex_destory,
这个函数里面会调用 pthread_mutex_trylock,
也就是说要先加锁,然后才摧毁锁,

你确定remove成功了么? 检查一下remove的返回值, 不出以外的话
应该是没有成功

okmmno1 发表于 2008-5-20 11:32:10

错误码应该是 EBUSY

sokiiya 发表于 2008-5-20 11:46:22

remove()返回的是0的。

sokiiya 发表于 2008-5-20 12:41:39

原帖由 okmmno1 于 2008-5-20 11:31 发表 http://www.acejoy.com/bbs/images/common/back.gif
。。。
也就是说要先加锁,然后才摧毁锁,
。。。


摧毁锁之前加锁用得不是acquire(),而是tryacquire()。tryacquire()返回-1就摧毁锁,我是这样用的,对吗?

sokiiya 发表于 2008-5-20 12:47:39

因为我在做一些释放工作,其优先级最高,别的线程的任务有acquire的排队的,也得被释放工作插队,然后其他那些任务不执行。

okmmno1 发表于 2008-5-20 13:03:14

tryacquire()返回-1, erron设置为EBUSY, 退出, 不会摧毁锁

okibun0129 发表于 2008-5-20 13:26:31

建议使用ACE_Gurad_xxx系列类以及相应的宏完成多线程处理锁的问题。

sokiiya 发表于 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 编辑 ]
页: [1] 2
查看完整版本: 请教个问题~~~有关ace的锁