tryacquire()返回-1, erron设置为EBUSY, 退出, 不会摧毁锁
/**
* Conditionally acquire lock (i.e., don't wait on queue).Returns
* -1 on failure.If we "failed" because someone else already had
* the lock, @c errno is set to @c EBUSY.
*/
int tryacquire (void);
那么不调用tryacquire吗?
直接remove()返回0,但其他线程还是阻塞在acquire()
着急啊。。。。:L 你用的windows? 阿,,,是的
咋了?:)
测试程序是window上试的。但最后做跨平台。 首先,windows下面,不管怎么样,最后remove的返回都是0.
其次,你期望的效果没有办法达到,remove以后,在win下面,
新加的线程如果进行acquire操作将失败, 已经获得过锁,或者阻塞在
acquire的线程不受影响。 确保多个线程均可以访问m_lock,然后把自己需要加锁的代码与ACE_GUARD_RETURN放到一个对大括号内
{
ACE_GUARD_RETURN(ACE_Thread_Mutex, guard,m_ lock, -1)。
// 自己的代码
}
不用手动释放锁,guard会帮你正确的释放申请的锁。 你可以先把你的程序放在linux上跑一下看看
其次, 看你刚才程序的逻辑,本身就有问题,
首先用 守卫锁住了锁, 然后摧毁锁, 接着,退出函数的时候, 守卫释放锁,
可这个时候锁已经不存在了。 知道了,ace的锁不是这样用的。
那个remove是摧毁锁,而不是我想要的那种优先级高的功能:让前面列队中的acquire返回错误,放掉列队不往下进行。:L
页:
1
[2]