我的课程中有一个互斥量,其定义如下:
ACE_Mutex m_specsMutex;
当我使用不带参数的acquire()方法时,一切正常。但是当我使用时间值(如下)时,它会立即返回-1值。我确信这个互斥锁在其他任何地方都没有获得,所以它不应该返回-1。
m_specsMutex.acquire(ACE_OS::gettimeofday() + ACE_Time_Value(30))
我做错了吗?
答案 0 :(得分:1)
浏览ACE_Mutex的doxygen文档,我不明白你的代码是如何编译的。超时值(tv)通过引用或指针传递,以便acquire()可以更新获取互斥锁的绝对时间。你不能传递表达式。试试这样:
ACE_Time_Value time = ACE_OS::gettimeofday() + ACE_Time_Value(30);
m_specsMutex.acquire(&time);
答案 1 :(得分:0)
我在win32上遇到了同样的问题。我需要很多时间来寻找解决方案,并希望与您分享。
ACE_Mutex(= ACE_Thread_Mutex)是使用CRITICAL_SECTION为win32环境实现的。这非常快,但无法等待超时。
最后我使用了ACE_Process_Mutex而不是ACE_Mutex。这是针对win32环境使用基于HANDLE的互斥锁实现的,可以在超时时使用。